56

fstreamオブジェクトからファイル名またはそのパスを取得できますか? の方法を調べましたが、fstreamそれに近いものは見つかりませんでした。

4

2 に答える 2

50

いいえ、少なくともライブラリの標準準拠の実装では、それは不可能です。

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

または、単純にファイル名も渡します。

于 2012-05-27T11:04:11.550 に答える
30

fstreamまた、から継承してそのように動作するfstreamだけでなく、そのファイル名を格納する小さなクラスを設計することもできます。

于 2012-05-27T11:34:09.240 に答える