Objective-C获取目录中的文件和子文件夹列表

时间:2013-11-12 09:22:23

标签: objective-c

从给定目录获取完整文件/文件夹路径的数组列表有什么技巧? 我希望在给定目录中搜​​索以.mp3结尾的文件,并且需要包含文件名的完整路径名。

NSArray* dirs = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:sourcePath error:Nil];

NSArray* mp3Files = [dirs filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self ENDSWITH '.mp3'"]];

这只返回文件名而不是路径

2 个答案:

答案 0 :(得分:37)

最好使用一个块来枚举数组,它可以用来连接路径和文件名,测试你想要的任何文件扩展名:

NSArray* dirs = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:sourcePath
                                                                    error:NULL];
NSMutableArray *mp3Files = [[NSMutableArray alloc] init];
[dirs enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    NSString *filename = (NSString *)obj;
    NSString *extension = [[filename pathExtension] lowercaseString];
    if ([extension isEqualToString:@"mp3"]) {
        [mp3Files addObject:[sourcePath stringByAppendingPathComponent:filename]];
    }
}];

答案 1 :(得分:2)

要在URL上使用谓词,我会这样做:

NSURL *bundleRoot = [[NSBundle mainBundle] bundleURL];
NSArray * dirContents = 
      [fm contentsOfDirectoryAtURL:bundleRoot
        includingPropertiesForKeys:@[] 
                           options:NSDirectoryEnumerationSkipsHiddenFiles
                             error:nil];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"pathExtension='.mp3'"];
NSArray *mp3Files = [directoryContents filteredArrayUsingPredicate:predicate];

此问题可能重复:Getting a list of files in a directory with a glob

还有NSDirectoryEnumerator对象,非常适合迭代目录中的文件。