为什么NSDirectoryEnumerator会在这里获取隐藏文件?

时间:2011-04-29 17:17:28

标签: cocoa macos nsfilemanager

我需要避免此枚举中的隐藏文件,但仍会添加.DS_Store文件。

我放入NSLog检查,我在那里得到输出。

可能有一些明显的东西,但我看不到它。

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

1 个答案:

答案 0 :(得分:11)

实际上,真正的问题是你使用了错误的运算符来指定掩码:

NSDirectoryEnumerationSkipsPackageDescendants ||  NSDirectoryEnumerationSkipsHiddenFiles

执行布尔OR,为您提供1,这不是一个有用的选项掩码。您需要使用单个管道:

NSDirectoryEnumerationSkipsPackageDescendants |  NSDirectoryEnumerationSkipsHiddenFiles

是按位OR

老答案:

您需要实际请求您要查看的属性:

dirEnumerator = [fileManager enumeratorAtURL:item 
                  includingPropertiesForKeys:[NSArray arrayWithObject:NSURLIsHiddenKey]
                                     options:NSDirectoryEnumerationSkipsPackageDescendants || NSDirectoryEnumerationSkipsHiddenFiles 
                                errorHandler:nil];

来自-[NSURL getResourceValue:forKey:error:] doc:

  

<强>讨论
  如果未为URL定义请求的资源值,则将值设置为nil。在这种情况下,该方法仍然返回YES。