La mayoría de los sistemas operativos no devuelven entradas de directorio en ningún orden en particular. Si desea clasificarlos (probablemente debería hacerlo si va a mostrar los resultados a un usuario humano), debe hacerlo en un pase por separado. Una forma que podría hacer que se va a insertar las entradas en una std::multimap
, algo así:
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));
}
}
}
entonces Se puede recorrer result_set
, y los mapeados boost::filesystem::path
entradas estará en orden ascendente.
¿Cómo se diferencia esto de su otra pregunta: http://stackoverflow.com/questions/4279164/cboost-file-system-to-return-a-list-of-files-older-than-a-specific- ¿hora? Nabulke te ha proporcionado una respuesta que debería orientarte en la dirección correcta. A partir de ahí no es demasiado difícil agregar los archivos a un vector y ordenarlos. – Ralf
Posible duplicado de [C++: impulsar el sistema de archivos para devolver una lista de archivos anteriores a una hora específica] (https://stackoverflow.com/questions/4279164/cboost-file-system-to-return-a-list-of -files-older-than-a-specific-time) – halfer