为什么通配符不能代表FindFirstFile中的目录?

Fre*_*ios 2 c windows winapi

我试图用来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));
  }
}
Run Code Online (Sandbox Code Playgroud)

使用此树,不会打印任何内容:

.
|- foo
|  |- some.txt
|
|- bar
|  |- another.txt
Run Code Online (Sandbox Code Playgroud)

为什么这个限制?是否存在变通方法?

Dav*_*nan 6

通配符仅允许在最终路径分隔符后的文件名部分中.该文件没有说明这一点.它说:

目录或路径以及文件名.文件名可以包含通配符,例如星号(*)或问号(?).

如果要搜索多个目录,则需要显式实现嵌套或递归迭代.