使用内置的Windows方法获取文件夹的内容

Using built in Windows Methods to get Contents of Folder

本文关键字:文件夹 获取 Windows 内置 方法      更新时间:2023-10-16

我的目标是只使用内置的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()的 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);
}