繁体   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