【发布时间】:2017-12-08 19:28:09
【问题描述】:
我正在开发一个必须在 Windows 操作系统上管理文件的 C++ 控制台应用程序。我需要获取具有特定扩展名的文件名的“列表”。我找到了很多解决方案,建议最多的是以下一种:
HANDLE hFind;
WIN32_FIND_DATA data;
hFind = FindFirstFile("C:\\PWS\\*.sda", &data);
if (hFind != INVALID_HANDLE_VALUE) {
do {
cout << data.cFileName << endl;
} while (FindNextFile(hFind, &data));
FindClose(hFind);
}
假设我在C:\\PWS 文件夹中有这些文件:
- f001.sdac
- f002.sda
- f003.sdab
- f004.sda
上面的代码打印了所有这些,而我只需要f002.sda和f004.sda。
有什么提示吗?
NB: 我不想使用 boost 库。
【问题讨论】:
-
...但是你可以使用 C++ 的文件系统库。
-
您是否在 cmd 上尝试过
dir *.sda以查看结果。它认为这是 Windows 通配符的问题 -
This answer 表明原因是 Windows 寻找短 8.3 文件名和长文件名的匹配项。找到一种方法为您的进程禁用此行为或使用
FindFirstFile("C:\\PWS\\*")并自行执行文件扩展名过滤,例如使用PathMatchSpec() 函数,该函数仅使用您传递给它的字符串并且不会检查 8.3 名称. -
@k-5,给你点!