我需要查找具有某些扩展名的文件,例如* .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
等等。有什么问题?
答案 0 :(得分:1)
WIN32_FIND_DATA::cFileName
is a TCHAR[MAX_PATH]
,而不是HANDLE
我不知道你为什么写HANDLE
,因为在文档页面上没有说过一次。
您的函数正在尝试打印出C字符串文件名,就像它是HANDLE
一样,这是指向TCHAR*
的另一种指针。它并不知道将指针作为TCHAR*
,因此它不知道您希望它将输出格式化为字符串。它只能知道打印指针所代表的地址。
您的函数FoundFileFunction
应该TCHAR*
。
如果您使用 STRICT 模式,则会自动检测到该问题。如果(例如)NO_STRICT
已定义,则HANDLE
是void*
的别名,根据语言规则,可以从TCHAR*
隐式初始化TCHAR
。你应该始终compile with STRICT
defined:这会改变那些不能隐式转换为彼此的类型,并且你会因为错误而收到编译错误。
此外,如果您的程序使用的是Unicode,那么char
不是wchar_t
而是std::cout
,因此您需要使用std::wcout
而不是{{1}}。