web-dev-qa-db-ja.com

fstreamからファイル名(またはパス)を取得する

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

43
Pavel Oganesyan

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

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

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

41
Nawaz

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

23
Walter