2009-11-02 10 views
11

Ho trovato molte librerie per aiutare con l'analisi degli argomenti della riga di comando, ma nessuno di loro sembra gestire i nomi dei file. Se ricevo qualcosa come "../foo" sulla riga di comando, come faccio a capire il percorso completo del file?Come si ottiene il percorso completo per un argomento della riga di comando del nome file?

+7

Perché pensi di aver bisogno del percorso completo del file? Syscalls funziona bene con percorsi relativi. –

+0

Credo che il comando 'pwd' ti dia il tuo percorso/posizione corrente. Dovresti essere in grado di capire il resto ... ma Andrew (commento sopra) è corretto. –

+1

La mia utilità genera alcuni file di testo, quindi ho bisogno del percorso completo. Costruire percorsi sembra un dolore, questo deve essere stato risolto già 1000 volte. –

risposta

15

POSIX ha realpath().

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

DESCRIZIONE
Il realpath() funzione deriva, dal percorso puntata da nome, un percorso assoluto che indica lo stesso file, la cui risoluzione non comporta". "" .. ", o collegamenti simbolici. Il percorso generato viene memorizzato, fino a un massimo di {PATH_MAX} byte, nel buffer indicato da risolto nome.

+0

Grazie per la modifica, Jonathan; e soprattutto per il riassunto. – pmg

19

Si potrebbe utilizzare boost::filesystem per ottenere il absolute path di un file, dalla sua 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

Negli script di shell, il comando "readlink -f" ha la funzionalità di realpath().

Problemi correlati