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

lul*_*ulu 3 macos cocoa 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;
                        }
                    }
Run Code Online (Sandbox Code Playgroud)

Jos*_*ell 11

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

NSDirectoryEnumerationSkipsPackageDescendants ||  NSDirectoryEnumerationSkipsHiddenFiles
Run Code Online (Sandbox Code Playgroud)

做布尔OR,给你1,这不是一个有用的选项掩码.您需要使用单个管道:

NSDirectoryEnumerationSkipsPackageDescendants |  NSDirectoryEnumerationSkipsHiddenFiles
Run Code Online (Sandbox Code Playgroud)

这是按位的OR.

老答案:

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

dirEnumerator = [fileManager enumeratorAtURL:item 
                  includingPropertiesForKeys:[NSArray arrayWithObject:NSURLIsHiddenKey]
                                     options:NSDirectoryEnumerationSkipsPackageDescendants || NSDirectoryEnumerationSkipsHiddenFiles 
                                errorHandler:nil];
Run Code Online (Sandbox Code Playgroud)

来自-[NSURL getResourceValue:forKey:error:]文档:


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