我正在尝试使用FindFirstFile
检查模式后是否存在某些文件,但看起来通配符*
不能代表目录。
int main()
{
WIN32_FIND_DATAW findFileData;
wchar_t path[] = LR"(.\*\*.txt)";
HANDLE hFind = FindFirstFileW(path, &findFileData);
if(hFind != INVALID_HANDLE_VALUE)
{
do
{
printf("%S\n", findFileData.cFileName);
} while (FindNextFileW(hFind, &findFileData));
}
}
使用此树,不会打印任何内容:
.
|- foo
| |- some.txt
|
|- bar
| |- another.txt
为什么会出现这种限制?是否存在变通方法?
答案 0 :(得分:6)
只有在最终路径分隔符后的文件名部分允许使用通配符。 documentation确实解释了这一点。它说:
目录或路径以及文件名。文件名可以包含通配符,例如星号(*)或问号(?)。
如果要搜索多个目录,则需要明确实现嵌套或递归迭代。
答案 1 :(得分:3)
正如documentation所述:
文件名可以包含通配符,例如星号(*)或问号(?)。
因此只有最后一部分可以有通配符,以前的部分必须是显式的。
您必须分两部分实现所需的功能:首先列出所有目录,然后使用通配符列出所有目录中的所有文件。