2011-04-19 145 views
1

我有功能的签名是像这样:打印的详细信息 - C++

void someFunc(ifstream ifile) { 

此功能内嵌代码深处。当我使用ddd调试此代码时,如何从ifstream对象获取文件的名称。尝试以下操作:
p ifile

ptype ifile 

导致信息山被弃置。有没有办法获得ifile是一个流的文件名?

感谢,
斯利拉姆。

+0

什么是'ptype'? – Nawaz 2011-04-19 12:41:50

+0

@Nawaz:ptype在ddd中打印变量的类型。所以,对于双重a,ptype a提供了双倍。 – Sriram 2011-04-19 13:38:28

回答

2

有没有办法让这名IFILE是流?

没办法。这是不可能的。

std::ifstream不存储文件名,也没有提供任何获取函数来获取文件名。因此,给定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]; 
     //... 
} 
+0

上述是否适用于所有文件指针?设计师为什么选择从该语言中省略此功能的具体原因? – Sriram 2011-04-19 13:41:43

+0

@Sriram:你指的是什么*文件指针*?我的答案取决于它,所以请澄清一点。 – Nawaz 2011-04-19 13:52:24

+0

作为ofstream的,ifstream的等等。也许我应该写文件流对象? – Sriram 2011-04-19 14:39:21