【发布时间】:2017-10-05 15:01:02
【问题描述】:
我需要获取目录中的文件夹列表,但只有文件夹。不需要文件。只有文件夹。我使用过滤器来确定这是否是一个文件夹,但它们不起作用并且所有文件和文件夹都被输出。
string root = "D:\\*";
cout << "Scan " << root << endl;
std::wstring widestr = std::wstring(root.begin(), root.end());
const wchar_t* widecstr = widestr.c_str();
WIN32_FIND_DATAW wfd;
HANDLE const hFind = FindFirstFileW(widecstr, &wfd);
这样,我检查它是不是一个文件夹。
if (INVALID_HANDLE_VALUE != hFind)
if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
if (!(wfd.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT))
如何解决问题?
【问题讨论】:
-
对#include
和 DIR 发誓 -
Windows 当前不支持此功能。您可以将 fSearchOp 设置为
FindExSearchLimitToDirectoriesFindFirstFileEx- 但此标志现在无效 -
RbMm,请帮帮我。如何实现您在我的示例中描述的内容?
-
@Xom9ik - 检查
FILE_ATTRIBUTE_DIRECTORY。你已经这样做了。和FindFirstFileExW(使用FIND_FIRST_EX_LARGE_FETCH和FindExInfoBasic更快。如果使用ZwQueryDirectoryFile的异步句柄而不等待结果但一次有多个查询,则可以使速度提高几倍(在ssd 磁盘上)跨度>