Die meisten Betriebssysteme geben keine Verzeichniseinträge in einer bestimmten Reihenfolge zurück. Wenn Sie sie sortieren möchten (Sie sollten es wahrscheinlich tun, wenn Sie die Ergebnisse einem menschlichen Benutzer zeigen), müssen Sie dies in einem separaten Durchlauf tun. Eine Möglichkeit, die Sie tun können, ist die Einträge in eine std::multimap
einzufügen, so etwas wie so:
namespace fs = boost::filesystem;
fs::path someDir("/path/to/somewhere");
fs::directory_iterator end_iter;
typedef std::multimap<std::time_t, fs::path> result_set_t;
result_set_t result_set;
if (fs::exists(someDir) && fs::is_directory(someDir))
{
for(fs::directory_iterator dir_iter(someDir) ; dir_iter != end_iter ; ++dir_iter)
{
if (fs::is_regular_file(dir_iter->status()))
{
result_set.insert(result_set_t::value_type(fs::last_write_time(dir_iter->path()), *dir_iter));
}
}
}
Sie können dann durch result_set
laufen, und die abgebildeten boost::filesystem::path
Einträge werden in aufsteigender Reihenfolge.
Wie unterscheidet sich das von Ihrer anderen Frage: http://stackoverflow.com/questions/4279164/cboost-file-system-to-return-a-list-of-files-older-than-a-specific- Zeit? Nabulke hat Ihnen eine Antwort gegeben, die Sie in die richtige Richtung weisen sollte. Von dort ist es nicht schwer, die Dateien einem Vektor hinzuzufügen und sie zu sortieren. – Ralf
Mögliches Duplikat von [C++: Boost-Dateisystem, um eine Liste von Dateien zurückzugeben, die älter als eine bestimmte Zeit sind] (https://stackoverflow.com/questions/4279164/cboost-file-system-to-return-a-list-of -files-old-than-a-specific-time) – halfer