2010-11-26 6 views
25

Necesito una lista de archivos en una carpeta y los archivos se ordenan con su fecha de modificación.cómo puedo obtener una lista de archivos en una carpeta en la que los archivos están ordenados con fecha de modificación

Estoy trabajando con C++ en Linux, la biblioteca de Boost es compatible.

¿Podría alguien darme alguna muestra del código de cómo implementar esto?

+2

¿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

+0

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

Respuesta

48

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.

+0

solo una nota aquí que si los archivos se crean/modifican en el mismo segundo, su orden no está garantizada, ya que 'std :: time_t' es exacto al segundo. – fduff

+2

Tenga en cuenta http://www.boost.org/doc/libs/1_46_1/libs/filesystem/v3/doc/reference.html#last_write_time. last_write_time obtiene ruta, no estado. fs :: last_write_time (dir_iter-> path()) – e271p314

+0

Falta un paréntesis izquierdo en result_set.insert ... – daramarak

Cuestiones relacionadas