C++ 从fstream获取文件名(或路径)

C++ 从fstream获取文件名(或路径),c++,file-io,fstream,C++,File Io,Fstream,我可以从fstream对象中获取文件名或其路径吗?我浏览了fstream的方法,没有找到任何接近它的方法。不,这是不可能的,至少在库的标准一致性实现中是不可能的 fstream类不存储文件名,也不提供任何检索文件名的函数 因此,跟踪此信息的一种方法是使用std::map作为: std::map<std::fstream*, std::string> stream_file_table; void f() { //when you open a file, do this:

我可以从
fstream
对象中获取文件名或其路径吗?我浏览了
fstream
的方法,没有找到任何接近它的方法。

不,这是不可能的,至少在库的标准一致性实现中是不可能的

fstream类不存储文件名,也不提供任何检索文件名的函数

因此,跟踪此信息的一种方法是使用
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
    //...
}
std::映射流文件表;
void f()
{
//打开文件时,请执行以下操作:
std::fstream文件(“somefile.txt”);
stream_file_table[&file]=“somefile.txt”;//存储文件名
//..
g(文件);
}
void g(std::fstream和文件)
{
std::string filename=stream_file_table[&file];//获取文件名
//...
}

或者,也可以简单地传递文件名。

您还可以设计一个小类,该类继承自
fstream
,其行为类似于
fstream
,但也存储其文件名。

我认为这是不可能的。基础文件可能有多个名称(如果它有多个硬链接)或根本没有名称(例如,如果它表示匿名管道)。这还允许您添加一个方便的构造函数,使用
std::string
,这在C++11中是必需的,但在C++03实现中通常不存在。这看起来不错,只有您需要说,一旦fstream对象被销毁,名称就必须被删除……完全有可能是标准一致的,并且包括一种检索用于打开文件的文件名的方法。这就是所谓的扩展,当时没有人说它不符合要求。关键是标准没有对此做出规定。