我正在使用MFC CFindFIle搜索给定搜索目录中的特定.dat文件,我需要输出与控制台(cout)中的搜索条件匹配的文件的文件路径和文件名。它可以工作,但在控制台中返回奇怪的结果:
01E73500:000AB810:01E77558
01E77F40:000AB810:01E77FD0
01E740C8:01EA7478:01EA1D00
01EB78C8:01ECAA80:01EAF240
Press any key to continue . . .
为什么输出格式为十六进制?区域设置或其他问题?代码在win 7 64bit,en_us locale上运行。
我使用以下代码进行搜索
void Recurse(LPCTSTR pstr)
{
CFileFind finder;
// build a string with wildcards
CString strWildcard(pstr);
strWildcard += _T("\\*.dat");
// start working for files
BOOL bWorking = finder.FindFile(strWildcard);
while (bWorking)
{
bWorking = finder.FindNextFile();
// skip . and .. files; otherwise, we'd
// recur infinitely!
if (finder.IsDots())
continue;
// if it's a directory, recursively search it
if (finder.IsDirectory())
{
CString str( finder.GetFileName());
cout << str << endl;
Recurse(str);
}
else {
CString sFilePath(finder.GetFilePath());
CString sFileName(finder.GetFileName());
//CString sFileTitle(finder.GetFileTitle());
cout << sFilePath << ":" << sFileName << ":" << endl;
}
}
finder.Close();
}
答案 0 :(得分:2)
两个问题: 如果程序编译为使用unicode,则使用wcout而不是cout。 CString是一个对象,而不是wchar_t *,所以你得到的输出是一些十六进制地址。使用:
wcout << (LPCTSTR)sFilePath;