获取文件夹中文件的有序列表

Get an ordered list of files in a folder

我已使用 boost::filesystem::directory_iterator 获取给定文件夹中所有可用文件的列表。

问题是我认为这种方法会按字母顺序给我文件,而结果似乎很随机。

有什么奇特的方法可以按字母顺序对它们进行排序吗?

我当前的代码:

if(boost::filesystem::is_directory(myFolder)){
    // Iterate existing files
    boost::filesystem::directory_iterator end_iter;
    for(boost::filesystem::directory_iterator dir_itr(myFolder);
        dir_itr!=end_iter; dir_itr++){

        boost::filesystem::path filePath;
        // Check if it is a file
        if(boost::filesystem::is_regular_file(dir_itr->status())){
            std::cout << "Reading file " << dir_itr->path().string() << std::cout;
        }
    }
}

我见过的执行你想要的最奇特的方法是直接来自 boost filesystem tutorial. In this 特定示例,作者将 filename/directory 附加到矢量然后利用std::sort 以确保数据按字母顺序排列。您的代码可以很容易地更新为使用这种相同类型的算法。

straight from the boost filesystem tutorial.

感谢泰勒 link。

如果你比较懒,这里是改编代码:

std::vector<std::filesystem::path> files_in_directory;
std::copy(std::filesystem::directory_iterator(myFolder), std::filesystem::directory_iterator(), std::back_inserter(files_in_directory));
std::sort(files_in_directory.begin(), files_in_directory.end());

for (const std::string & filename : files_in_directory) {
    std::cout << path.string() << std::endl; // printed in alphabetical order
}