从NSCachesDirectory中以编程方式删除文件

6
如果我在我的应用程序中以编程方式下载了位于NSCachesDirectory的文件,那么也可以以编程方式删除这些文件吗?

@iPatel的回答很不错。否则,您可以在该文件夹中进行枚举并删除所有文件。 - NSCry
4个回答

7

获取目录中文件的完整路径有多种方法,下面是其中一种。

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

mainPath = [mainPath stringByAppendingPathComponent:DirectoryName];

这里的mainPath是文件的完整路径。

NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;
BOOL fileExists = [fileManager fileExistsAtPath:mainPath];

if (fileExists)
{
     BOOL success = [fileManager removeItemAtPath:mainPath error:&error];
     if (!success) NSLog(@"Error: %@", [error localizedDescription]);

}

2
这将从“文档”目录中删除文件,而不是“缓存”目录。 - trojanfoe
1
好的,我们可以将NSDocumentDirectory替换为NSCachesDirectory以从缓存中删除。我是正确的,不是吗? - Emy Alsabbagh
@trojanfoe..很抱歉,朋友..说实话我不知道如何从NSCachesDirectory获取文件路径..请检查我的编辑。 - iPatel

5
我认为这段代码应该适合您使用:

我认为这段代码应该适合您使用:

NSFileManager *fileMgr = [NSFileManager defaultManager];
NSArray *fileArray = [fileMgr contentsOfDirectoryAtPath:directory error:nil];

for (NSString *filename in fileArray)  {
    [fileMgr removeItemAtPath:[directory stringByAppendingPathComponent:filename] error:NULL];
}

1
子目录怎么样? - trojanfoe

3

结合Anurag和iPatel

我们得到了这个最终代码,将清除缓存目录中的所有内容。

    NSArray *myPathList = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *mainPath    = [myPathList  objectAtIndex:0];
NSFileManager *fileMgr = [NSFileManager defaultManager];
NSArray *fileArray = [fileMgr contentsOfDirectoryAtPath:mainPath error:nil];
for (NSString *filename in fileArray)  {
    [fileMgr removeItemAtPath:[mainPath stringByAppendingPathComponent:filename] error:NULL];
}

1
如果您想特定删除UIWebView的缓存,那么以下内容可能会有所帮助:
for(NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) {
     if([[cookie domain] isEqualToString:someNSStringUrlDomain]) {
         [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
     }
}

问题是要从NSCachesDirectory删除文件,而不是清除Cookie。 - Dhiru

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接