使用std :: regex_search获取与模式匹配的所有文件和文件夹

时间:2018-01-02 12:18:19

标签: c++ regex

我想要实现搜索窗口,我用它:

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 //这不是一个好结果

有什么问题?你可以帮我发现并修复错误吗?

1 个答案:

答案 0 :(得分:0)

用于模式添加标志:

std::regex_constants::icase | std::regex_constants::ECMAScript | std::regex_constants::optimize;

并为regex_search函数添加标志:

std::regex_constants::match_continuous

将$添加到模式结尾