为什么CFindFile函数GetFilePath,GetFileName返回十六进制输出?

时间:2013-11-29 20:20:41

标签: c++ mfc

我正在使用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();
}

1 个答案:

答案 0 :(得分:2)

两个问题: 如果程序编译为使用unicode,则使用wcout而不是cout。 CString是一个对象,而不是wchar_t *,所以你得到的输出是一些十六进制地址。使用:

wcout << (LPCTSTR)sFilePath;