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.txt
、foo1.txt
、fooa.txt
等,但 不会 匹配 foo10.txt
或 foo_abc.txt
.
我知道解决此问题的唯一方法是 re-check 之后的结果,以确保您消除任何不需要的匹配项。在这种情况下,听起来只需将文件名的长度与您期望的长度进行比较就足够了。
我使用通配符(? 和 *)在带有 _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.txt
、foo1.txt
、fooa.txt
等,但 不会 匹配 foo10.txt
或 foo_abc.txt
.
我知道解决此问题的唯一方法是 re-check 之后的结果,以确保您消除任何不需要的匹配项。在这种情况下,听起来只需将文件名的长度与您期望的长度进行比较就足够了。