【问题标题】:iOS: Can't get content of Caches directoryiOS:无法获取缓存目录的内容
【发布时间】:2016-05-28 03:23:32
【问题描述】:

试图获取Caches目录的内容:

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
)}

我怎么了?

【问题讨论】:

  • 什么是self.class? path的值是多少?
  • 您确定路径中的“/Containers/Data/Application/800DE429-F10C-438E-BB04-2948C0B07E7C”部分与磁盘上的内容匹配吗?

标签: ios objective-c nsfilemanager


【解决方案1】:

在此处为@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];

希望这对试图访问缓存目录中退出的文件夹中文件的任何人有所帮助。

【讨论】:

    【解决方案2】:

    您使用了错误的路径。要为应用程序获取正确的缓存目录,请使用:

    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);
    

    【讨论】:

    • 所以,我的错误是使用absoluteString 方法。我已将其更改为NSString *path = [[self.class cachesDirectoryURL] path];,现在它可以工作了。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2014-10-05
    • 1970-01-01
    • 2013-12-22
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多