Поиск невидимых папок с помощью внимания путем создания NSPredicate с помощью NSMetadataQuery

StackOverflow https://stackoverflow.com/questions/1441466

Вопрос

Я создаю NSmetaDataQuery для поиска невидимых папок (например, «.myInvisibleFolder»).

К сожалению, Spotlight, похоже, не находит папки, начинающиеся с «.», даже если они специально включены в предикат.

Что работает и не работает

Поиск любого невидимого имени файла работает.

Поиск по контенту работает (kMDItemTextContent).

Нет файла, начинающегося с "." когда -либо встречается.Всегда возвращает 0 результатов.

В качестве теста работает поиск невидимого контента в Finder.

Что я делаю не так?Есть ли другой способ найти невидимые папки?

Код:

- (void)searchForMyInvisableFolders{
    self.query = [[[NSMetadataQuery alloc] init] autorelease];

    // To watch results send by the query, add an observer to the NSNotificationCenter
    NSNotificationCenter *nf = [NSNotificationCenter defaultCenter];
    [nf addObserver:self selector:@selector(queryNote:) name:nil object:self.query];

    // Sort results by file name
    [self.query setSortDescriptors:[NSArray arrayWithObject:[[[NSSortDescriptor alloc] initWithKey:(id)kMDItemFSName ascending:YES] autorelease]]];

    [self.query setDelegate:self];

    //Create a predicate to search for file name
    NSPredicate* predicate = [NSPredicate predicateWithFormat:@" (kMDItemFSName == '.myInvisibleFolder')"];

    //Create a predicate to search for invisible files
    NSPredicate* invisablePredicate = [NSPredicate predicateWithFormat:@"kMDItemFSInvisible == YES"];

    //Compound predicate
    NSPredicate* compoundPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:predicate, invisiblePredicate, nil]]; 

    // Set it to the query.
    [self.query setPredicate:compoundPredicate];           

    // Start it.
    [self.query startQuery]; 

}   
Это было полезно?

Решение

Ваш код отлично работает для меня, если я изменю первый предикат на:

[NSPredicate predicateWithFormat:@" (kMDItemFSName == '.DS_Store')"];

Действительно ли ваша невидимая папка называется «.myInvisableFolder» (обратите внимание на неправильное написание слова «невидимый»)?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top