我想要实现搜索窗口,我用它:
int main()
{
Search(L"C:\\Users", L"*.txt"); // or Search(L"C:\\Users", L"*.txt");
}
search(path, CString searchString)
{
std::wregex searchPattern = GetPattern(searchString);
result = RecursiveSearch(path, searchPattern);
return result ;
}
RecursiveSearch(path, std::wregex searchPattern)
{
CString newPath = path + CString("\\*");
WIN32_FIND_DATA findData;
HANDLE fileHandle = INVALID_HANDLE_VALUE;
fileHandle = FindFirstFile(newPath, &findData);
do
{
if (INVALID_HANDLE_VALUE != fileHandle)
{
if (std::regex_search(findData.cFileName, searchPattern))
{
if (findData.cFileName != std::wstring(TEXT(".")) && findData.cFileName != std::wstring(TEXT("..")))
{
std::wcout << (const wchar_t*)findData.cFileName
}
}
if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if (findData.cFileName != std::wstring(TEXT(".")) && findData.cFileName != std::wstring(TEXT("..")))
{
RecursiveSearch(GenerateNewPath(path, ToCString(findData.cFileName)), searchPattern);
}
}
}
else
{
continue;
}
} while (FindNextFile(fileHandle, &findData));
return allObject;
}
此代码没问题,它已成功运行。但反应并不好。
此示例的一些结果是:
的text.txt
调试2017-12-18-150616.txt
d.txt.lnk //这不是一个好结果
有什么问题?你可以帮我发现并修复错误吗?
答案 0 :(得分:0)
用于模式添加标志:
std::regex_constants::icase | std::regex_constants::ECMAScript | std::regex_constants::optimize;
并为regex_search函数添加标志:
std::regex_constants::match_continuous
将$添加到模式结尾