2016-02-16 76 views
3

的內容試圖獲得緩存目錄的內容:的iOS:無法獲得緩存目錄

NSError *error; 
    NSString *path = [[self.class cachesDirectoryURL] absoluteString]; 
    NSArray *directoryItems = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:&error]; 

path是正確的,我可以在Finder中看到它的存在,幷包含我的文件。
directoryItemsnilerror

Error Domain=NSCocoaErrorDomain Code=260 "The folder 「Caches」 doesn’t exist." UserInfo={NSUnderlyingError=0x7982d2d0 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}, NSFilePath=file:///Users/seelts/Library/Developer/CoreSimulator/Devices/C1411C3D-91FB-4D91-83A4-D0747071AE36/data/Containers/Data/Application/800DE429-F10C-438E-BB04-2948C0B07E7C/Library/Caches/, NSUserStringVariant=(
    Folder 
)} 

這有什麼錯嗎?

+0

什麼是self.class?路徑的價值是什麼? – BergQuester

+0

您確定路徑上的「/ Containers/Data/Application/800DE429-F10C-438E-BB04-2948C0B07E7C」部分與磁盤上的內容匹配嗎? –

回答

5

您正在使用錯誤的路徑。爲了得到正確的緩存目錄的應用程序使用此:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
NSString *cacheDirectory = [paths objectAtIndex:0]; 

cacheDirectory,您將收到的字符串路徑是這樣的(內部消除file方案):

/Users/username/Library/Developer/CoreSimulator/Devices/D55805E2-50FF-4D8D-8D04-490001AD6071/data/Containers/Data/Application/DE437461-E0F8-4C11-861E-2D1C56CDF6F1/Library/Caches 


整個代碼:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
NSString *cacheDirectory = [paths objectAtIndex:0]; 

NSError *error; 
NSArray *directoryItems = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:cacheDirectory error:&error]; 
NSLog(@"%@", directoryItems); 
+0

所以,我的錯誤是使用'absoluteString'方法。我已經將它更改爲'NSString * path = [[self.class cachesDirectoryURL] path];'現在它工作。謝謝。 – seelts

0

在此處添加其他信息到@ shpasta的答案。 假設您在Cache目錄中有其他文件夾,並且您想要在這些文件夾中找到一些文件。 這是如何訪問這些文件夾內的文件的。

NSArray *subFolders = [[NSFileManager defaultManager]subpathsAtPath:yourCacheDirectory]; 
NSString* additionalParams; 

for(NSString* sub in subFolders){ 
      if([sub containsString:@".log"]){ 
       //Assuming you have .log file inside the folder. 
       additionalParams = sub; 
      } 
     } 

NSString* fullFileURL = [NSString stringWithFormat:@"%@/%@",cacheDirectory,additionalParams]; 

希望這可以幫助任何人嘗試訪問緩存目錄中退出文件夾內的文件。