Cocoa 为什么NSDirectoryEnumerator在这里提取隐藏文件?
我需要避免在此枚举中隐藏文件,但仍在添加.DS_存储文件 我输入NSLog进行检查,并在那里获得输出 可能有一些明显的东西,但我看不到Cocoa 为什么NSDirectoryEnumerator在这里提取隐藏文件?,cocoa,macos,nsfilemanager,Cocoa,Macos,Nsfilemanager,我需要避免在此枚举中隐藏文件,但仍在添加.DS_存储文件 我输入NSLog进行检查,并在那里获得输出 可能有一些明显的东西,但我看不到 NSDirectoryEnumerator *dirEnumerator; NSFileManager *fileManager = [[NSFileManager alloc] init]; dirEnumerator = [fileManager enumeratorAtURL:item
NSDirectoryEnumerator *dirEnumerator;
NSFileManager *fileManager = [[NSFileManager alloc] init];
dirEnumerator = [fileManager enumeratorAtURL:item
includingPropertiesForKeys:[NSArray array]
options:NSDirectoryEnumerationSkipsPackageDescendants || NSDirectoryEnumerationSkipsHiddenFiles
errorHandler:nil];
for (NSURL *urlItem in dirEnumerator) {
// is item hidden ?
NSNumber *isHidden = nil;
if ([urlItem getResourceValue:&isHidden forKey:NSURLIsHiddenKey error:nil]) {
if ([isHidden isEqual:[NSNumber numberWithInt:1]]) {
NSLog(@"isHidden is 1");
continue;
}
}
实际上,真正的问题是您使用了错误的运算符来指定掩码:
NSDirectoryEnumerationSkipsPackageDescendants || NSDirectoryEnumerationSkipsHiddenFiles
执行布尔值或
,为您提供1
,这不是一个有用的选项掩码。您需要使用单根管道:
NSDirectoryEnumerationSkipsPackageDescendants | NSDirectoryEnumerationSkipsHiddenFiles
它是按位的或
旧答案:
您需要实际请求要查看的属性:
dirEnumerator = [fileManager enumeratorAtURL:item
includingPropertiesForKeys:[NSArray arrayWithObject:NSURLIsHiddenKey]
options:NSDirectoryEnumerationSkipsPackageDescendants || NSDirectoryEnumerationSkipsHiddenFiles
errorHandler:nil];
从文档:
讨论
如果未为URL定义请求的资源值,则将值设置为nil。在这种情况下,该方法仍然返回YES
您是说如果使用选项NSDirectoryEnumerationSkipsHiddenFiles
,枚举器将包含“隐藏”文件吗?这就是让我困惑的部分。我以为选项是说“不要枚举隐藏文件”。@lulu:不,我是说你调用resourceValue:forKey:error:
,是因为你没有要求文件管理器包含这些信息。@lulu:但事实上我才意识到真正的问题。见我的最新答案。谢谢,乔希。现在一切如期而至。“代码盲症”的一个很好的例子?我以后会检查我的烟斗。@Lulu:这发生在我们所有人身上…:)