2011-11-02 169 views
6

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

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

+0

http://stackoverflow.com/questions/1523793/get-directory-contents-in-date-modified-order是这样吗?我想你可以使用NSFileCreationDate而不是NSFileModificationDate –

回答

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]

+0

真棒,谢谢。 –

+0

您可以使用NSDictionary而不是PathWithModDate。无需为此申报班级。 – Flax