win32 文件模糊搜索接口(通配符表达式详解)
主要有两个,FindFirstFile 与 PathMatchSpec,前者用于搜索文件系统,后者用于检查路径字符串是否与表达式相匹。https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmdhttps://docs.microsoft.com/en-us/windows/w
·
主要有两个,FindFirstFile 与 PathMatchSpec,前者用于搜索文件系统,后者用于检查路径字符串是否与表达式相匹。
https://docs.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=cmd
https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-findfirstfilea
WIN32_FIND_DATA finddata;
HANDLE hFind = ::FindFirstFile(path, &finddata);
if (hFind != INVALID_HANDLE_VALUE)
{
BOOL findSucessful = true;
while(findSucessful)
{
foundfullpath = folderpath+finddata.cFileName;
if (!PathMatch(Exludes, foundfullpath, finddata.cFileName) && filesRecord.find(foundfullpath)==filesRecord.end())
{
if (finddata.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
{
//是目录,应当开启递归搜索...
}
else if (...可以进一步调用PathMatchSpec)
{
}
}
findSucessful = ::FindNextFile(hFind, &finddata);
}
::FindClose(hFind);
}
PathMatchSpec(L"C:\\tmp\\123", L"C:\\*"); // 返回 true
注意 FindFirstFile 传入的路径,中间部分不能有通配符,只允许末尾出现:
FindFirstFile(L"C:\\tmp\\*.*", &finddata); // 搜索文件夹内所有文件与目录
而 PathMatchSpec 的通配符可以出现在中间甚至最开始:
PathMatchSpec(L"C:\\tmp\\123", L"*\\123"); // 匹配
星号匹配任意长度,问号匹配一个。文档中有更多注意事项。
更多推荐
所有评论(0)