如何使用文件系统列出目录中具有给定扩展名的所有文件?

时间:2016-11-16 13:34:46

标签: c++ visual-studio-2015

由于filesystem存在于编译器的实验部分并且将到达最新版本的C ++,如何使用它从列表中列出与给定扩展名匹配的文件?

1 个答案:

答案 0 :(得分:3)

您可以使用std::experimental::filesystem::directory_iterator并手动过滤:

for(const auto& p : fs::directory_iterator("some_directory"))
{
    if(p.path().extension() == ".txt")
    { 
        /* ... */
    }
}

您可以按如下方式创建一个漂亮的包装器:

template <typename TF>
void for_files_with_extension(std::string_view dir, std::string_view ext, TF&& f)
{
    for(const auto& p : fs::directory_iterator(dir))
    {
        if(p.path().extension() == ext)
        { 
            f(p);
        }
    }
}

可以这样使用:

for_files_with_extension("/home/someone/", ".txt", 
    [](const auto& p){ std::cout << "Found text file at " << p << "\n"; });