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

发布于 2024-11-03 19:47:59 字数 1065 浏览 0 评论 0原文

我需要避免此枚举中的隐藏文件,但仍在添加 .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;
                        }
                    }

i need to avoid hidden files in this enumeration, but .DS_Store files are still being added.

i put in the NSLog to check, and i am getting output there.

there's probably something obvious, but i can't see it.

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浮云落日 2024-11-10 19:47:59

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

NSDirectoryEnumerationSkipsPackageDescendants ||  NSDirectoryEnumerationSkipsHiddenFiles

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

NSDirectoryEnumerationSkipsPackageDescendants |  NSDirectoryEnumerationSkipsHiddenFiles

按位OR

旧答案:

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

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

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

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

Actually, the real problem is that you're using the wrong operator to specify the mask:

NSDirectoryEnumerationSkipsPackageDescendants ||  NSDirectoryEnumerationSkipsHiddenFiles

does Boolean OR, giving you 1, which isn't a useful options mask. You need to use the single pipe:

NSDirectoryEnumerationSkipsPackageDescendants |  NSDirectoryEnumerationSkipsHiddenFiles

which is bitwise OR.

OLD ANSWER:

You need to actually request the properties that you're going to look at:

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

from the -[NSURL getResourceValue:forKey:error:] doc:

Discussion
value is set to nil if the requested resource value is not defined for the URL. In this case, the method still returns YES.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文