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なためファイルパスが追加できないためです。
以上でぇぇぇえぇす。