2010-06-11 10 views
20

Apro un file utilizzando std::ifstream.Come ottenere il percorso del file da std :: ifstream in C++

Posso aprire il file utilizzando il percorso relativo (file.txt) o il percorso assoluto (C:\test\file.txt).

Mentre sto passando una stringa come nome file, non so se si tratta di un percorso relativo o assoluto.

Qualcuno può dirmi come ottenere il percorso assoluto dopo che il file è stato aperto con successo utilizzando std::ifstream?

es .:

std::ifstream file(strFile); // strFile is "file.txt" or "C:\test\file.txt" 

voglio ottenere il percorso assoluto dopo è stato aperto il file con successo.

Grazie,

+0

Stai facendo un'app per console o stai utilizzando un framework per avere una sorta di interfaccia utente (UI)? – Alerty

risposta

3

Le classi fstream hanno alcuna funzionalità per l'accesso o l'elaborazione del nome utilizzato per aprire il file con, e la libreria standard C++ non ha funzioni di elaborazione il nome del file - si dovrà scrivere il codice da soli, o utilizzare una libreria di terze parti o funzioni fornite dal sistema operativo.

17

Non è possibile, std::ifstream non memorizza queste informazioni.

Cosa si può fare, tuttavia, è:

directory di lavoro corrente
  1. processo in uso di comporre il percorso assoluto da soli, o
  2. usare una libreria come Boost.Filesystem biblioteca di trasformare tra il relativo e percorsi assoluti.

    boost::filesystem::path abs_path = boost::filesystem::complete("./rel/path"); 
    std::string abs_path_str = abs_path.string(); 
    
2

non credo sia possibile per uno std :: fstream. L'ho fatto per FILE * su Windows (in modo non portatile). Vedi from file object to file name.

Avete considerato di estendere l'ifstream con la vostra classe che ricorda il nome del file?

+1

Sarebbe utile se la persona che ha votato questa risposta di 5 anni abbia lasciato un commento che spieghi cosa è sbagliato. –

Problemi correlati