21日ですが、明けましておめでとうございます。
今年もよろしくお願いしマウス。チューチュー。
NSFileManagerでとあるディレクトリ以下にあるファイルを一覧で取得し、作成された日付順に並び替えたい場合。
// Cacheディレクトリ
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];
// ファイル一覧(サブディレクトリは除外)
NSArray *files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:nil];
// 属性情報を格納する配列
NSMutableArray *attributes = [NSMutableArray array];
// ファイル配列をループ
for (NSString *file in files) {
// ファイル属性にファイルパスを追加するためにDictionaryを用意しておく
NSMutableDictionary *tmpDictionary = [NSMutableDictionary dictionary];
NSString *filepath = [path stringByAppendingPathComponent:file];
// ファイル情報(属性)を取得
// 取得できる情報については csoulsの日記 を参考に!
NSDictionary *attr = [[NSFileManager defaultManager] attributesOfItemAtPath:filepath error:nil];
// tmp配列に属性を格納
[tmpDictionary setDictionary:attr];
// tmp配列にファイルパスを格納
[tmpDictionary setObject:filepath forKey:@"FilePath"];
[attributes addObject:tmpDictionary];
}
// ソートさせる
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:NSFileCreationDate ascending:NO];
NSArray *sortarray = [NSArray arrayWithObject:sortDescriptor];
// 並び替えられたファイル配列
NSArray *resultarray = [attributes sortedArrayUsingDescriptors:sortarray];
[sortDescriptor release];
なぜわざわざtmpDictionaryを用意するか?についてですが、
属性を取得する
NSDictionary *attr = [[NSFileManager defaultManager] attributesOfItemAtPath:filepath error:nil];は、NSDictionaryなためファイルパスが追加できないためです。
以上でぇぇぇえぇす。