我有一个功能,其签名是这样的:
void someFunc(ifstream ifile) {
此功能深深嵌入代码中。当我使用ddd调试此代码时,如何从ifstream对象获取文件的名称。尝试以下方法:
p ifile
或
ptype ifile
导致大量信息被倾倒。有没有办法获取ifile是一个流的文件名?
谢谢,
斯利拉姆。
答案 0 :(得分:2)
有没有办法获取ifile是一个流的文件名?
没办法。那是不可能的。
std::ifstream
不存储文件名,也不提供任何 get 函数来获取文件名。因此,给定std::ifstream
类型的对象,你无法得到它。
如果你真的需要知道函数内部的文件名(并且不能更改函数签名),那么你可以维护全局查找表(或者最好是std::map
)并添加一个无论何时打开文件,都可以输入以下内容:
std::map<std::ifstream*, const char*> g_stream_file_pairs;
std::ifstream ifile("xyz/abc/filename.txt");
g_stream_file_pairs.insert(std::make_pair(&ifile, ""xyz/abc/filename.txt"));
void someFunc(std::ifstream & ifile)
{
const char* filename = g_stream_file_pairs[&ifile];
//...
}