Getting filename (or path) from fstream

Pavel Oganesyan picture Pavel Oganesyan · May 27, 2012 · Viewed 41.4k times · Source

Can I get a file name or its path from a fstream object? I looked through the methods of fstream and didn't find anything close to it.

Answer

Nawaz picture Nawaz · May 27, 2012

No, that is not possible, not at least in the Standard conformant implementation of the library.

The fstream class doesn't store the filename, and doesn't provide any function for retrieving it.

So one way to keep track of this information is to use std::map as:

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
    //...
}

Or, simply pass around the filename as well.