Get an ordered list of files in a folder

16.9k views Asked by At

I have used boost::filesystem::directory_iterator in order to get a list of all the available files into a given folder.

The problem is that I supposed this method would give me the files in alphabetical order, while the results seem pretty random.

Is there any fancy way of alphabetically sorting them?

My current code:

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;
        }
    }
}
2

There are 2 answers

2
Tyler Jandreau On BEST ANSWER

The fanciest way I've seen to perform what you want is straight from the boost filesystem tutorial. In this particular example, the author appends the filename/directory to the vector and then utilizes a std::sort to ensure the data is in alphabetical order. Your code can easily be updated to use this same type of algorithm.

0
PJ127 On

straight from the boost filesystem tutorial.

Thank you Tyler for the link.

If you are lazy, here is the adapted code:

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 << filename << std::endl; // printed in alphabetical order
}