为什么NSDirectoryEnumerator在这里拾取隐藏文件? [英] Why is NSDirectoryEnumerator picking up hidden files here?

查看:238
本文介绍了为什么NSDirectoryEnumerator在这里拾取隐藏文件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要避免隐藏文件在这枚举,但是.DS_Store文件仍然被添加。



我放在NSLog检查,我得到输出



这可能是显而易见的,但我看不到。

  NSDirectoryEnumerator * dirEnumerator; 
NSFileManager * fileManager = [[NSFileManager alloc] init];

dirEnumerator = [fileManager enumeratorAtURL:item
includePropertiesForKeys:[NSArray array]
options:NSDirectoryEnumerationSkipsPackageDescendants || NSDirectoryEnumerationSkipsHiddenFiles
errorHandler:nil];

for(NSURL * urlItem in dirEnumerator){

//是项目隐藏?
NSNumber * isHidden = nil;
if([urlItem getResourceValue:& isHidden forKey:NSURLIsHiddenKey error:nil]){
if([isHidden isEqual:[NSNumber numberWithInt:1]]){

NSLog (@isHidden is 1);
continue;
}
}


解决方案

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

  NSDirectoryEnumerationSkipsPackageDescendants || NSDirectoryEnumerationSkipsHiddenFiles 

执行Boolean OR code> 1 ,这不是一个有用的选项掩码。您需要使用单个管道:

  NSDirectoryEnumerationSkipsPackageDescendants | NSDirectoryEnumerationSkipsHiddenFiles 

这是按位 OR p>

老问答:



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

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



< documentation / Cocoa / Reference / Foundation / Classes / NSURL_Class / Reference / Reference.html#// apple_ref / doc / uid / 20000301-SW39> - [NSURL getResourceValue:forKey:error:]
doc:


讨论

到nil是否未为URL定义所请求的资源值。在这种情况下,该方法仍然返回YES。



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

解决方案

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.

这篇关于为什么NSDirectoryEnumerator在这里拾取隐藏文件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆