获取资源文件夹中的文件列表 – iOS
比方说,我的iPhone应用程序中名为“Documents”的“Resources”文件夹中有一个文件夹。
有没有办法,我可以得到一个数组或在运行时包含在该文件夹中的所有文件列表的某种types的列表?
所以,在代码中,它看起来像:
NSMutableArray *myFiles = [...get a list of files in Resources/Documents...];
这可能吗?
你可以像这样获取Resources
目录的path,
NSString * resourcePath = [[NSBundle mainBundle] resourcePath];
然后将Documents
附加到path中,
NSString * documentsPath = [resourcePath stringByAppendingPathComponent:@"Documents"];
然后,您可以使用NSFileManager
任何目录列表API。
NSError * error; NSArray * directoryContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsPath error:&error];
注意 :将源文件夹添加到包中时,请确保select“复制时为所有添加的文件夹创build文件夹引用”选项
迅速
更新了Swift 3
let docsPath = Bundle.main.resourcePath! + "/Resources" let fileManager = FileManager.default do { let docsArray = try fileManager.contentsOfDirectory(atPath: docsPath) } catch { print(error) }
进一步阅读:
- NSFileManager类的引用
- 文件系统编程指南
- error handling文档
- Swift 2.0博客文章中的error handling
- 如何find一种方法可能抛出并在Swift中捕获它们的错误
你也可以试试这个代码:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSError * error; NSArray * directoryContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsDirectory error:&error]; NSLog(@"directoryContents ====== %@",directoryContents);
Swift版本:
if let files = try? FileManager.default.contentsOfDirectory(atPath: Bundle.main.bundlePath ){ for file in files { print(file) } }
列出目录中的所有文件
NSFileManager *fileManager = [NSFileManager defaultManager]; NSURL *bundleURL = [[NSBundle mainBundle] bundleURL]; NSArray *contents = [fileManager contentsOfDirectoryAtURL:bundleURL includingPropertiesForKeys:@[] options:NSDirectoryEnumerationSkipsHiddenFiles error:nil]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"pathExtension ENDSWITH '.png'"]; for (NSString *path in [contents filteredArrayUsingPredicate:predicate]) { // Enumerate each .png file in directory }
recursion枚举目录中的文件
NSFileManager *fileManager = [NSFileManager defaultManager]; NSURL *bundleURL = [[NSBundle mainBundle] bundleURL]; NSDirectoryEnumerator *enumerator = [fileManager enumeratorAtURL:bundleURL includingPropertiesForKeys:@[NSURLNameKey, NSURLIsDirectoryKey] options:NSDirectoryEnumerationSkipsHiddenFiles errorHandler:^BOOL(NSURL *url, NSError *error) { NSLog(@"[Error] %@ (%@)", error, url); }]; NSMutableArray *mutableFileURLs = [NSMutableArray array]; for (NSURL *fileURL in enumerator) { NSString *filename; [fileURL getResourceValue:&filename forKey:NSURLNameKey error:nil]; NSNumber *isDirectory; [fileURL getResourceValue:&isDirectory forKey:NSURLIsDirectoryKey error:nil]; // Skip directories with '_' prefix, for example if ([filename hasPrefix:@"_"] && [isDirectory boolValue]) { [enumerator skipDescendants]; continue; } if (![isDirectory boolValue]) { [mutableFileURLs addObject:fileURL]; } }
有关NSFileManager的更多信息,请点击这里
Swift 3 (和返回的URL)
let url = Bundle.main.resourceURL! do { let urls = try FileManager.default.contentsOfDirectory(at: url, includingPropertiesForKeys:[], options: FileManager.DirectoryEnumerationOptions.skipsHiddenFiles) } catch { print(error) }