2011-04-19 150 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