È 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
risposta
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.
Questo va bene, solo tu dovrai dire che il nome deve essere rimosso una volta che gli oggetti fstream vengono distrutti ... –
Si può anche progettare una piccola classe che eredita da fstream
e si comporta come un fstream
ma memorizza anche il nome del file.
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. –
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). –