NSDirectoryEnumerator忽略枚举中的1个文件?

时间:2014-11-04 06:51:31

标签: ios file io ios8.1

我正在使用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中的模拟器中。即使由于某种原因,文件被锁定(或其他任何)错误处理程序应该被调用,所以我不知道发生了什么。

是否与“文档”文件夹中的所有文件都是“硬”链接到单独文件夹中的文件有关?什么会导致硬链接无法获取... 取消链接

任何人都有任何想法可能会发生这种情况?

2 个答案:

答案 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];
}

也应该检查错误。