2012-05-27 11 views
35

È possibile ottenere un nome file o il relativo percorso da un oggetto fstream? Ho esaminato i metodi di fstream e non ho trovato nulla di simile.Ottenere nomefile (o percorso) da fstream

+8

Non credo sia possibile. Il file sottostante può avere diversi nomi (se ha più collegamenti fisici) o nessun nome (se rappresenta una pipe anonima, per esempio). –

risposta

33

No, ciò non è possibile, non almeno nell'attuazione conforme standard della libreria.

La classe fstream non memorizza il nome file e non fornisce alcuna funzione per il recupero.

Quindi un modo per tenere traccia di queste informazioni è quello di utilizzare std::map come:

std::map<std::fstream*, std::string> stream_file_table; 

void f() 
{ 
    //when you open a file, do this: 
    std::fstream file("somefile.txt"); 

    stream_file_table[&file] = "somefile.txt"; //store the filename 

    //.. 
    g(file); 
} 
void g(std::fstream & file) 
{ 
    std::string filename = stream_file_table[&file]; //get the filename 
    //... 
} 

Oppure, semplicemente passare intorno al nome del file pure.

+0

Questo va bene, solo tu dovrai dire che il nome deve essere rimosso una volta che gli oggetti fstream vengono distrutti ... –

20

Si può anche progettare una piccola classe che eredita da fstream e si comporta come un fstream ma memorizza anche il nome del file.

+7

Questo ti permette anche di aggiungere un comodo costruttore prendendo un 'std :: string', che è richiesto in C++ 11 ma di solito non è presente nelle implementazioni di C++ 03. –

Problemi correlati