gpt4 book ai didi

c++ - 使用内置 Windows 方法获取文件夹内容

转载 作者:行者123 更新时间:2023-11-28 01:16:33 26 4
gpt4 key购买 nike

我的目标是仅使用 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 函数?有更好的方法吗?

最佳答案

您的代码无法如图所示进行编译。您正在调用 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);
}

关于c++ - 使用内置 Windows 方法获取文件夹内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58511928/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com