2012-10-12 35 views
4

在iOS上使用NSFileManager和較低級別的API讀取文件系統的許多方法都涉及內置緩存,因此即使目錄中有很多項目,從未更改的目錄中讀取也可能非常快。是否可以在iOS中放置一個目錄並讓操作系統緩存結果?

我有,我希望能夠用水珠在目錄中列舉文件的情況:

即該文件夾命名爲這樣的文件:

1-1-0.png 
1-2-0.png 
1-3-0.png 
1-3-1.png 
2-2-1.png 
5-1-1.png 
5-1-2.png 
5-2-1.png 
5-3-0.png 
6-1-1.png 
... 
1501-5-2.png 

我可能希望得到所有與5-*-1.png匹配的文件名,這將使我回到5-1-1.png5-2-1.png

加載整個目錄列表,然後在RAM中進行匹配非常簡單,但是有沒有一種方法可以在操作系統級別執行此操作,因此可能需要內置緩存,因此對同一個glob的重複調用會給緩存更快)結果?

回答

1

可以使用​​3210功能如本要點概述:https://gist.github.com/bkyle/293959

#include <glob.h> 

+ (NSArray*) arrayWithFilesMatchingPattern: (NSString*) pattern inDirectory: (NSString*) directory { 
    NSMutableArray* files = [NSMutableArray array]; 
    glob_t gt; 
    NSString* globPathComponent = [NSString stringWithFormat: @"/%@", pattern]; 
    NSString* expandedDirectory = [directory stringByExpandingTildeInPath]; 
    const char* fullPattern = [[expandedDirectory stringByAppendingPathComponent: globPathComponent] UTF8String]; 
    if (glob(fullPattern, 0, NULL, &gt) == 0) { 
     int i; 
     for (i=0; i<gt.gl_matchc; i++) { 
      size_t len = strlen(gt.gl_pathv[i]); 
      NSString* filename = [[NSFileManager defaultManager] stringWithFileSystemRepresentation: gt.gl_pathv[i] length: len]; 
      [files addObject: filename]; 
     } 
    } 
    globfree(&gt); 
    return [NSArray arrayWithArray: files]; 
} 
相關問題