Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 为什么NSDirectoryEnumerator在这里提取隐藏文件?_Cocoa_Macos_Nsfilemanager - Fatal编程技术网

Cocoa 为什么NSDirectoryEnumerator在这里提取隐藏文件?

Cocoa 为什么NSDirectoryEnumerator在这里提取隐藏文件?,cocoa,macos,nsfilemanager,Cocoa,Macos,Nsfilemanager,我需要避免在此枚举中隐藏文件,但仍在添加.DS_存储文件 我输入NSLog进行检查,并在那里获得输出 可能有一些明显的东西,但我看不到 NSDirectoryEnumerator *dirEnumerator; NSFileManager *fileManager = [[NSFileManager alloc] init]; dirEnumerator = [fileManager enumeratorAtURL:item

我需要避免在此枚举中隐藏文件,但仍在添加.DS_存储文件

我输入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;
                        }
                    }

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

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:这发生在我们所有人身上…:)