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

Posted

技术标签:

【中文标题】Objective-C 获取目录中文件和子文件夹的列表【英文标题】:Objective-C get list of files and subfolders in a directory 【发布时间】:2013-11-12 09:22:23 【问题描述】:

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

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

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

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

【问题讨论】:

dirs 是如何填充的? 【参考方案1】:

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

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]];
    
];

【讨论】:

【参考方案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 对象,它非常适合遍历目录中的文件。

【讨论】:

mp3Files 这里也只包含文件名而不是文件的完整路径。

以上是关于Objective-C 获取目录中文件和子文件夹的列表的主要内容,如果未能解决你的问题,请参考以下文章

php 获取文件目录下的文件和子文件 包括显示出指定的文件名后缀文件。

如何在 Objective-C 的 NSDocument 目录中保存和获取多个 pdf 文件?

如何获取没有文件的文件夹和子文件夹列表?

如何在Objective c中获取目录中文件的创建日期

选择 *.jpg 文件 Objective-C

javascript 获取文件夹和子文件夹中的所有文件