我有功能的簽名是像這樣:打印的詳細信息 - C++
void someFunc(ifstream ifile) {
此功能內嵌代碼深處。當我使用ddd調試此代碼時,如何從ifstream對象獲取文件的名稱。嘗試以下操作:
p ifile
或
ptype ifile
導致信息山被棄置。有沒有辦法獲得ifile是一個流的文件名?
感謝,
斯利拉姆。
我有功能的簽名是像這樣:打印的詳細信息 - C++
void someFunc(ifstream ifile) {
此功能內嵌代碼深處。當我使用ddd調試此代碼時,如何從ifstream對象獲取文件的名稱。嘗試以下操作:
p ifile
或
ptype ifile
導致信息山被棄置。有沒有辦法獲得ifile是一個流的文件名?
感謝,
斯利拉姆。
有沒有辦法讓這名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];
//...
}
什麼是'ptype'? – Nawaz 2011-04-19 12:41:50
@Nawaz:ptype在ddd中打印變量的類型。所以,對於雙重a,ptype a提供了雙倍。 – Sriram 2011-04-19 13:38:28