按创建日期排序文件 - iOS

时间:2011-11-02 08:47:21

标签: objective-c ios file directory

我正在尝试获取i目录中的所有文件,并根据创建日期或修改日期对它们进行排序。那里有很多例子,但我不能让他们中的任何一个工作。

任何人都有一个很好的例子,如何从按日期排序的目录中获取文件数组?

1 个答案:

答案 0 :(得分:5)

这里有两个步骤,获取具有创建日期的文件列表,并对它们进行排序。

为了便于以后对它们进行排序,我创建了一个对象来保存带有修改日期的路径:

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

@implementation PathWithModDate
@end

现在,要获取文件和文件夹列表(不是深度搜索),请使用:

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

请注意,一旦我创建了一个PathWithDate对象数组,我就会使用sortUsingComparator将它们按正确的顺序排列(我选择了降序)。要改为使用创建日期,请改用[attr objectForKey:NSFileCreationDate]