2009-11-02 7 views
11

Ich habe viele Bibliotheken gefunden, die beim Parsen von Befehlszeilenargumenten helfen, aber keiner von ihnen scheint mit der Handhabung von Dateinamen zu tun zu haben. Wenn ich in der Befehlszeile etwas wie "../foo" erhalte, wie finde ich dann den vollständigen Pfad zur Datei?Wie bekomme ich den vollständigen Pfad für ein Befehlszeilenargument für Dateinamen?

+7

Warum denken Sie, dass Sie den vollständigen Pfad zur Datei benötigen? Syscalls funktionieren problemlos mit relativen Pfaden. –

+0

Ich glaube, der Befehl 'pwd' gibt Ihnen Ihren aktuellen Pfad/Standort. Du solltest in der Lage sein, den Rest herauszufinden ... aber Andrew (Kommentar oben) ist richtig. –

+1

Mein Dienstprogramm erzeugt einige Textdateien, daher brauche ich den vollständigen Pfad. Wege zu konstruieren klingt wie ein Schmerz, der schon 1000 Mal gelöst sein muss. –

Antwort

15

POSIX hat realpath().

#include <stdlib.h> 
char *realpath(const char *filename, char *resolvedname); 

BESCHREIBUNG
Die realpath() Funktion leitet sich aus dem Pfadnamen von Dateinamen wies eine absolute Pfadnamen, die Namen der gleichen Datei, deren Auflösung ist nicht mit“. "" .. "oder symbolische Links. Der generierte Pfadname wird bis zu maximal {PATH_MAX} Bytes im Puffer gespeichert, auf den aufgelöster Name zeigt.

+0

Danke für die Bearbeitung, Jonathan; und vor allem für die Zusammenfassung. – pmg

19

Sie könnten boost::filesystem verwenden die absolute path einer Datei zu erhalten, von seinem relative path:

namespace fs = boost::filesystem; 
fs::path p("test.txt"); 
fs::path full_p = fs::complete(p); // complete == absolute 
std::cout << "The absolute path: " << full_p; 
+4

fs :: absolute (p) in V3 – KindDragon

1

In Shellskripten hat der Befehl "readlink -f" die Funktionalität von realpath().