c++ - 使用内置的 Windows 方法获取文件夹的内容
问题描述
我的目标是仅使用 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 版本FindFirstFile()
(通过将窄 ANSI 字符串文字而不是宽 Unicode 字符串文字传递给它),并且std::wstring
没有接受 achar[]
作为输入的构造函数。
除了这个错误,您还忽略了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);
}