2011-11-02 27 views
6

Estoy tratando de obtener todos los archivos en mi directorio y ordenarlos según la fecha de creación o modificar la fecha. Hay muchos ejemplos, pero no puedo conseguir ninguno para que funcionen.Ordenar archivos por fecha de creación - iOS

Cualquiera tiene un buen ejemplo de cómo obtener una matriz de archivos de un directorio ordenados por fecha?

+0

http://stackoverflow.com/questions/1523793/get-directory-contents-in-date-modified-order es esto? Supongo que puedes usar NSFileCreationDate en lugar de NSFileModificationDate –

Respuesta

5

Aquí hay dos pasos para obtener la lista de archivos con sus fechas de creación y ordenarlos.

Con el fin de hacer más fácil para ordenarlos después, se crea un objeto de mantener el camino con su fecha de modificación:

@interface PathWithModDate : NSObject 
@property (strong) NSString *path; 
@property (strong) NSDate *modDate; 
@end 

@implementation PathWithModDate 
@end 

Ahora, para obtener la lista de archivos y carpetas (no una búsqueda profunda), utilice la siguiente:

- (NSArray*)getFilesAtPathSortedByModificationDate:(NSString*)folderPath { 
    NSArray *allPaths = [NSFileManager.defaultManager contentsOfDirectoryAtPath:folderPath error:nil]; 

    NSMutableArray *sortedPaths = [NSMutableArray new]; 
    for (NSString *path in allPaths) { 
     NSString *fullPath = [folderPath stringByAppendingPathComponent:path]; 

     NSDictionary *attr = [NSFileManager.defaultManager attributesOfItemAtPath:fullPath error:nil]; 
     NSDate *modDate = [attr objectForKey:NSFileModificationDate]; 

     PathWithModDate *pathWithDate = [[PathWithModDate alloc] init]; 
     pathWithDate.path = fullPath; 
     pathWithDate.modDate = modDate; 
     [sortedPaths addObject:pathWithDate]; 
    } 

    [sortedPaths sortUsingComparator:^(PathWithModDate *path1, PathWithModDate *path2) { 
     // Descending (most recently modified first) 
     return [path2.modDate compare:path1.modDate]; 
    }]; 

    return sortedPaths; 
} 

Tenga en cuenta que una vez que se crea una matriz de objetos PathWithDate, yo uso sortUsingComparator para ponerlos en el orden correcto (elegí descendente). Para usar la fecha de creación en su lugar, use [attr objectForKey:NSFileCreationDate] en su lugar.

+0

impresionante, gracias. –

+0

puede usar un NSDictionary en lugar de PathWithModDate. No es necesario declarar una clase para eso. – Flax

Cuestiones relacionadas