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 获取文件目录下的文件和子文件 包括显示出指定的文件名后缀文件。