我正在使用NSDirectoryEnumerator清除我的应用程序的Documents文件夹。它主要是有效的,除了由于某些我无法理解的原因,它留下了1个文件。这是我的代码:
NSDirectoryEnumerator * enumerator = [fileMan enumeratorAtURL:[NSURL fileURLWithPath:docsFolder()] includingPropertiesForKeys:nil options:NSDirectoryEnumerationSkipsSubdirectoryDescendants errorHandler:^BOOL(NSURL *url, NSError *error) {
NSLog(@"%@,%@",url,error);
return YES;
}];
for (NSURL * fileURL in enumerator) {
BOOL removed = [fileMan removeItemAtURL:fileURL error:nil];
NSLog(@"Removed %@:%d",fileURL.path,removed);
}
上述代码中的docsFolder()
调用是一个函数,它只使用NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)
返回应用程序的文档文件夹。我已经打破并登录错误处理程序,它永远不会命中。我那里有很多文件,它们都被删除了。除此之外,总会留下一个文件,总是同一个文件。这是在iOS 8.1中的模拟器中。即使由于某种原因,文件被锁定(或其他任何)错误处理程序应该被调用,所以我不知道发生了什么。
是否与“文档”文件夹中的所有文件都是“硬”链接到单独文件夹中的文件有关?什么会导致硬链接无法获取... 取消链接?
任何人都有任何想法可能会发生这种情况?
答案 0 :(得分:0)
您正在枚举它们时删除文件。这使调查员感到困惑。更安全的方法是:枚举文件并将其名称收集到数组中。枚举结束后,浏览数组并删除文件。
答案 1 :(得分:0)
如果您只想删除目录中的所有内容,而不是包含目录,请尝试:
NSArray *directoryContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:path error:nil];
for (NSString *item in directoryContents) {
[[NSFileManager defaultManager] removeItemAtPath:[path stringByAppendingPathComponent:item] error:nil];
}
也应该检查错误。