cd ~/appstars
~ / objective-c / objective-c-%e6%8c%87%e5%ae%9a%e3%81%97%e3%81%9f%e3%83%87%e3%82%a3%e3%83%ac%e3%82%af%e3%83%88%e3%83%aa%e4%bb%a5%e4%b8%8b%e3%81%ae%e5%85%a8%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%82%92%e8%a1%a8

Objective-C 指定したディレクトリ以下の全ファイルを表示

2015 . 01 . 21 #objective-c by Hoshino

こんにちは。

最近なんだかまた生命線が濃くなった気がするあっきぃです。

無駄な動きで生傷ばかり増やしているので、なんか疲れるお仕事ください。よろしくお願いします。

(傷もすぐ治るよ!)

さてさて

今日はこんな関数を用意しました。

+(NSArray*)allFilesOfDirectroyAtPath:(NSString*)dirPath
{
        NSMutableArray *dirs = [NSMutableArray array];
        NSMutableArray *files = [NSMutableArray array];
        NSFileManager *fileManager = [NSFileManager defaultManager];
        NSError *error;
        NSArray *list = [fileManager contentsOfDirectoryAtPath:dirPath error:&error;];
        for(NSString *name in list) {
                NSString *fullPath = [dirPath stringByAppendingPathComponent:name];
                BOOL isDir;
                if ([fileManager fileExistsAtPath:fullPath isDirectory:&isDir;]) {
                        if (isDir) {
                                [dirs addObject:fullPath];
                        } else {
                                [files addObject:fullPath];
                        }
                }
        }
        for(NSString *subDirPath in dirs) {
                NSArray *subFiles = [self allFilesOfDirectroyAtPath:subDirPath];
                [files addObjectsFromArray:subFiles];
        }
        return files;
}

指定したディレクトリ内の全ファイルをフルパスで取得する関数です。

再帰的に呼び出しているのがポイントですね。

使う時はこんな感じ。

NSString *libPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSArray *files = [MYClass allFilesOfDirectroyAtPath:libPath];
NSLog(@”%@”, files);

結果はこんな感じ

(
        “/var/mobile/Containers/Data/Application/123CAD20-DEFE-9922-DADE-A12608D099EE/Library/Caches/JMCache/JMImageCache-2802983090”,
        “/var/mobile/Containers/Data/Application/123CAD20-DEFE-9922-DADE-A12608D099EE/Library/Caches/JMCache/JMImageCache-3419541678”,
        “/var/mobile/Containers/Data/Application/123CAD20-DEFE-9922-DADE-A12608D099EE/Library/Caches/JMCache/JMImageCache-3911839920”,
        “/var/mobile/Containers/Data/Application/123CAD20-DEFE-9922-DADE-A12608D099EE/Library/Caches/JMCache/JMImageCache-4019589813”,
        …
)

あるとたまに便利。