假设我的iPhone应用程序的“资源”文件夹中有一个名为“文档”的文件夹。
有没有一种方法可以在运行时获取该文件夹中包含的所有文件的数组或某种类型的列表?
因此,在代码中,它看起来像:
NSMutableArray *myFiles = [...get a list of files in Resources/Documents...];
这可能吗?
Answers:
您可以这样获取Resources
目录的路径,
NSString * resourcePath = [[NSBundle mainBundle] resourcePath];
然后将追加Documents
到路径,
NSString * documentsPath = [resourcePath stringByAppendingPathComponent:@"Documents"];
然后,您可以使用的任何目录列表API NSFileManager
。
NSError * error;
NSArray * directoryContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsPath error:&error];
注意:将源文件夹添加到捆绑包中时,请确保选择“复制时为任何添加的文件夹创建文件夹引用选项”
Drag & Drop
在项目上放置一个文件夹,然后内容将被复制。或添加一个Copy Files
构建阶段并指定要在其中复制的目录。
Create folder references for any added folders
复制时是否选择了选项?
为Swift 3更新
let docsPath = Bundle.main.resourcePath! + "/Resources"
let fileManager = FileManager.default
do {
let docsArray = try fileManager.contentsOfDirectory(atPath: docsPath)
} catch {
print(error)
}
进一步阅读:
您也可以尝试以下代码:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSError * error;
NSArray * directoryContents = [[NSFileManager defaultManager]
contentsOfDirectoryAtPath:documentsDirectory error:&error];
NSLog(@"directoryContents ====== %@",directoryContents);
列出目录中的所有文件
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
}
递归枚举目录中的文件
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的更多信息,请点击这里
如果与子目录“相对于项目”(蓝色文件夹)有关,则可以编写:
func getAllPListFrom(_ subdir:String)->[URL]? {
guard let fURL = Bundle.main.urls(forResourcesWithExtension: "plist", subdirectory: subdir) else { return nil }
return fURL
}
用法:
if let myURLs = getAllPListFrom("myPrivateFolder/Lists") {
// your code..
}