FindFirstFile cout问题

时间:2015-08-02 12:49:22

标签: c++ winapi

我需要查找具有某些扩展名的文件,例如* .doc,* .docx 首先,我正在寻找所有文件

lstrcat(szPath, L"*");
hFind = FindFirstFile(szPath, &fdFindData);

然后,我将创建的文件与我需要的扩展进行比较

PCWSTR str1 = L".doc";

if(NULL != StrStr(fdFindData.cFileName,str1)) {
        FoundFileFunction(fdFindData.cFileName);
         }

然后我遇到了cout的问题

VOID FoundFileFunction(HANDLE hFile)
{
    std::cout<<hFile;
}

这是输出:

009AE50000
009AEB0000
009AEBBB00

等等。有什么问题?

1 个答案:

答案 0 :(得分:1)

WIN32_FIND_DATA::cFileName is a TCHAR[MAX_PATH],而不是HANDLE 我不知道你为什么写HANDLE,因为在文档页面上没有说过一次。

您的函数正在尝试打印出C字符串文件名,就像它是HANDLE一样,这是指向TCHAR*的另一种指针。它并不知道将指针作为TCHAR*,因此它不知道您希望它将输出格式化为字符串。它只能知道打印指针所代表的地址。

您的函数FoundFileFunction应该TCHAR*

如果您使用 STRICT 模式,则会自动检测到该问题。如果(例如)NO_STRICT已定义,则HANDLEvoid*的别名,根据语言规则,可以从TCHAR*隐式初始化TCHAR。你应该始终compile with STRICT defined:这会改变那些不能隐式转换为彼此的类型,并且你会因为错误而收到编译错误。

此外,如果您的程序使用的是Unicode,那么char不是wchar_t而是std::cout,因此您需要使用std::wcout而不是{{1}}。