fstream
オブジェクトからファイル名またはそのパスを取得できますか? fstream
のメソッドを調べましたが、それに近いものは見つかりませんでした。
いいえ、それは不可能です。少なくともライブラリの標準準拠の実装ではそうではありません。
Fstreamクラスはファイル名を保存せず、ファイルを取得する機能も提供しません。
したがって、この情報を追跡する1つの方法は、std::map
なので:
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
//...
}
または、ファイル名も単純に渡します。
fstream
を継承し、fstream
のように動作するが、そのファイル名も格納する小さなクラスを設計することもできます。