簡體   English   中英

FindFirstFile cout 問題

[英]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::cFileNameTCHAR[MAX_PATH] ,而不是HANDLE
我不知道你為什么寫HANDLE ,因為它甚至一次都沒有在文檔頁面上說過。

您的函數試圖打印出 C 字符串文件名,就好像它是一個HANDLE ,它是一種不同類型的指向TCHAR*的指針。 它不知道將指針作為TCHAR*因此它不知道您希望它將輸出格式化為字符串。 它只能知道打印指針所代表的地址。

您的函數FoundFileFunction應該采用TCHAR*

如果您使用STRICT模式,該問題將被自動檢測到。 如果(例如)定義了NO_STRICT ,那么HANDLEvoid*的別名,根據語言規則,它可以從TCHAR*隱式初始化。 您應該始終使用定義的STRICT編譯:這會將類型更改為不能相互隱式轉換,並且您會因錯誤而收到編譯錯誤。

此外,如果您的程序使用 Unicode,則TCHAR不是char而是wchar_t ,因此您需要使用的不是std::cout而是std::wcout

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM