【发布时间】:2012-06-02 03:45:02
【问题描述】:
我可以从fstream 对象中获取文件名或其路径吗?我查看了fstream的方法,并没有找到任何接近它的东西。
【问题讨论】:
-
我认为这不可能。底层文件可能有多个名称(如果它有多个硬链接)或根本没有名称(例如,如果它表示匿名管道)。
我可以从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
//...
}
或者,也可以简单地传递文件名。
【讨论】:
您还可以设计一个小类,它继承自 fstream,其行为类似于 fstream,但也存储其文件名。
【讨论】:
std::string,这在 C++11 中是必需的,但在 C++03 实现中通常不存在。