[英]FindFirstFile cout problems
我需要找到具有特定擴展名的文件,例如 *.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
等等。 有什么問題?
WIN32_FIND_DATA::cFileName
是TCHAR[MAX_PATH]
,而不是HANDLE
。
我不知道你為什么寫HANDLE
,因為它甚至一次都沒有在文檔頁面上說過。
您的函數試圖打印出 C 字符串文件名,就好像它是一個HANDLE
,它是一種不同類型的指向TCHAR*
的指針。 它不知道將指針作為TCHAR*
因此它不知道您希望它將輸出格式化為字符串。 它只能知道打印指針所代表的地址。
您的函數FoundFileFunction
應該采用TCHAR*
。
如果您使用STRICT模式,該問題將被自動檢測到。 如果(例如)定義了NO_STRICT
,那么HANDLE
是void*
的別名,根據語言規則,它可以從TCHAR*
隱式初始化。 您應該始終使用定義的STRICT
編譯:這會將類型更改為不能相互隱式轉換,並且您會因錯誤而收到編譯錯誤。
此外,如果您的程序使用 Unicode,則TCHAR
不是char
而是wchar_t
,因此您需要使用的不是std::cout
而是std::wcout
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.