Why is NSDirectoryEnumerator picking up hidden files here?
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.
精彩评论