列出具有相同名称的目录中的文件

时间:2017-09-10 16:16:09

标签: c++ filesystems

我有文件夹: C:\ Users \ Bob \ Desktop \ SomeFolder

在文件夹“SomeFolder”中,我们有10个文件:

abc.txt,abc1.txt,abc2.txt,abc3.txt,abc4.txt,

xyz.txt,xyz1.txt,xyz2.txt,xyz3.txt,xyz4.txt。

现在假设我要显示(列出)名称以“abc”开头的所有文件。

看起来应该是这样的:

std::string path = "path_to_directory"; //C:\Users\Bob\Desktop\SomeFolder
for (auto & p : fs::directory_iterator(path))
std::cout << p << std::endl;

但我需要某种“过滤器”。

2 个答案:

答案 0 :(得分:2)

只需使用std::string::find

即可
for(auto& p: fs::directory_iterator(tempPath))
{
     std::string file_name = p.path().filename();
    if ( file_name.find("abc") == 0 )
    {
       std::cout << file_name  <<std::endl;
    }
}

Demo Here

对于某些&#34;复杂的&#34;可以像std::regex一样使用路径中的模式

std::regex fileMatcher( tempPath + "/abc.*", 
                       // All files that begins with `abc` in current directory .
        std::regex_constants::ECMAScript | std::regex_constants::icase);

for(auto& p: fs::directory_iterator(tempPath))
if (std::regex_match (p.path().c_str() ,fileMatcher  ))
{
   std::cout << p <<std::endl;
}

Demo Here

可能需要调整Windows Path。我没有最新的编译器来检查Windows

答案 1 :(得分:-4)

编辑代码:

    for(auto & p : fs::directory_iterator(path)){
        if (regex_match(p , regex("(abc)(.*)"))){
            cout <<p<< endl;
        }
    }
    return 0;

它打印以字符串“abc”

开头的文件名