Windows 通配符搜索中的问号

Question marks in wildcard search in Windows

我使用通配符(? 和 *)在带有 _tfindfirst64 和 _tfindnext64 的 c++ 程序中搜索 Windows 中的文件。我观察了以下代码

    TCHAR root[1024] = L"C:/testData/?????_?????.jpg";
    _tfinddata64_t c_file;
    intptr_t hFile = _tfindfirst64(root, &c_file);
    do
    {
        wcout << c_file.name << endl;
    } while (_tfindnext64(hFile, &c_file) == 0);
    _findclose(hFile);

选取以下文件:

12345_---.jpg
12345_12.jpg
12345_12345.jpg

但我预计过滤器只会接受最后一个,因为它意味着:“5 个任意字符后跟‘_’再跟另一个字符‘.jpg’”as described。正确的做法是什么?

如您所见,文件搜索中的 ? 不需要存在字符,但如果存在搜索字符串未考虑的字符,则匹配将失败。例如,foo?.txt 将匹配 foo.txtfoo1.txtfooa.txt 等,但 不会 匹配 foo10.txtfoo_abc.txt.

我知道解决此问题的唯一方法是 re-check 之后的结果,以确保您消除任何不需要的匹配项。在这种情况下,听起来只需将文件名的长度与您期望的长度进行比较就足够了。