我需要在明确的文件夹中获取一些文件。为此,我使用这个answer,它工作正常。但是,我的文件夹结构如下:
Documents/
idOfFolder1/
images/
image1.jpg
image2.png
sounds/
sound1.mp3
files/
file1.pdf
idOfFolder2/
images/
...
我需要遍历具有特定ID的所有文件夹并获取图像。由于所写的答案遍历所有文件夹,因此需要的时间比正常情况多得多(我们有很多文件)。为了优化过程,我想跳过“声音”和“文件”文件夹。有办法解决这个问题吗?
谢谢!
答案 0 :(得分:1)
如果您不想使用NSPredicate
,以下代码也会按照您的意愿行事,
(此代码将直接访问具有给定ID的文件夹并选择 images 文件夹中的所有内容)
-(void) printImagesOfFolders:(NSArray *) folderIds{
for(NSString *folderId in folderIds){
NSArray *paths = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask];
NSURL *documentsURL = [paths lastObject];
NSString * imageFolderPath = [NSString stringWithFormat:@"%@/images", folderId];
NSURL *rootURL = [documentsURL URLByAppendingPathComponent:imageFolderPath];
NSFileManager *fm = [NSFileManager defaultManager];
NSDirectoryEnumerator *dirEnumerator = [fm enumeratorAtURL:rootURL
includingPropertiesForKeys:@[NSURLNameKey, NSURLIsDirectoryKey]
options:NSDirectoryEnumerationSkipsHiddenFiles
errorHandler:nil];
for (NSURL *url in dirEnumerator) {
NSLog(@"url: %@", url);
}
}
}
[self printImagesOfFolders:@[@"idOfFolder1",@"idOfFolder2",@"idOfFolder3",@"idOfFolder4"]];
答案 1 :(得分:0)
我认为您可以使用NSPredicate以不同的方式在NSDirectoryEnumerator数组中实现它,就像在这个答案Iterating through files in nested folders或Filter NSFileManager with NSPredicate中一样,但语法可能很尴尬:看看NSPredicate语法文档NSPredicate Format String
在你的情况下,我会: 1.使用带有for循环的快速枚举 2.如果可能,重新设计文件夹结构 3.使用核心数据或其他缓存系统加速加载过程(这涉及与实际文件不时同步)
答案 2 :(得分:0)
没错。楼上是正确的,索引将根据图片直接命名,以便CPU可以准确找到文件