Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting filename (or path) from fstream

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.

like image 625
Pavel Oganesyan Avatar asked May 27 '12 10:05

Pavel Oganesyan


People also ask

Does fstream create directory?

ofstream never creates directories. In fact, C++ doesn't provide a standard way to create a directory. Your could use dirname and mkdir on Posix systems, or the Windows equivalents, or Boost.


2 Answers

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.

like image 111
Nawaz Avatar answered Sep 22 '22 19:09

Nawaz


you may also design a little class which inherits from fstream and behaves like a fstream but also stores its file name.

like image 26
Walter Avatar answered Sep 25 '22 19:09

Walter