我有一个函数,它的签名是这样的:
void someFunc(ifstream ifile) {
此功能深嵌在代码中。当我用 ddd 调试这段代码时,如何从 ifstream 对象中获取文件名。尝试以下操作:
p ifile
或
ptype ifile
导致大量信息被丢弃。有没有办法获取 ifile 流向的文件名?
谢谢,
斯里拉姆。
最佳答案
Is there a way to get the filename that ifile is a stream to?
没办法。这是不可能的。
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];
//...
}
关于c++ - 在 gdb 中打印有关文件流对象的详细信息 - C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5716463/