簡體   English   中英

使用內置的 Windows 方法獲取文件夾的內容

[英]Using built in Windows Methods to get Contents of Folder

我的目標是僅使用 C++/Windows 的內置方法(我認為我的 C++ 版本不支持 std::filesystem)來獲取文件夾中的文件名。

現在我有這個:

HANDLE hFind;
    WIN32_FIND_DATA data;
    hFind = FindFirstFile("C:\\Folder\\*", &data);
    if (hFind != INVALID_HANDLE_VALUE) {
        do {
            //Process File Name
            std::wstring ws(data.cFileName);
        } while (FindNextFile(hFind, &data));
        FindClose(hFind);
    }

這似乎返回空白名稱,而不是文件夾中文件的名稱。

我是否正確使用了這個 FindFirstFile function? 有一個更好的方法嗎?

如圖所示,您的代碼無法編譯。 您正在調用FindFirstFile()的 ANSI 版本(通過將窄 ANSI 字符串文字而不是寬 Unicode 字符串文字傳遞給它),並且std::wstring沒有接受char[]作為輸入的構造函數。

除了這個錯誤,您還忽略了data.dwFileAttributes字段來區分文件和子文件夾,並且在子文件夾的情況下,您沒有檢查data.cFileName的內容以忽略"." ".."特殊文件夾名稱。

嘗試這個:

WIN32_FIND_DATAW data;
HANDLE hFind = FindFirstFileW(L"C:\\Folder\\*", &data);
if (hFind != INVALID_HANDLE_VALUE)
{
    do
    {
        if ((data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)
        {
            // Process File Name
            std::wstring ws(data.cFileName);
            ...
        }
        else
        {
            if ((lstrcmpW(data.cFileName, L".") != 0) &&
                (lstrcmpW(data.cFileName, L"..") != 0))
            {
                // Process Folder Name
                std::wstring ws(data.cFileName);
                ...
            }
        }
    }
    while (FindNextFileW(hFind, &data));
    FindClose(hFind);
}

暫無
暫無

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

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