Почему NSDirectoryEnumerator собирает здесь скрытые файлы? - PullRequest
3 голосов
/ 29 апреля 2011

Мне нужно избегать скрытых файлов в этом перечислении, но файлы .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;
                        }
                    }

1 Ответ

11 голосов
/ 30 апреля 2011

На самом деле, реальная проблема в том, что вы используете неправильный оператор для указания маски:

NSDirectoryEnumerationSkipsPackageDescendants ||  NSDirectoryEnumerationSkipsHiddenFiles

делает логическое значение OR, что дает вам 1, что не является полезной опциеймаска.Вам нужно использовать одну трубу:

NSDirectoryEnumerationSkipsPackageDescendants |  NSDirectoryEnumerationSkipsHiddenFiles

, которая является побитовой OR.

СТАРЫЙ ОТВЕТ:

Вы должны фактически запросить свойства, которые выбудет смотреть:

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

из -[NSURL getResourceValue:forKey:error:] документ:

Обсуждение
значение установлено вnil, если запрашиваемое значение ресурса не определено для URL.В этом случае метод по-прежнему возвращает YES.

...