Поиск невидимых папок с помощью внимания путем создания NSPredicate с помощью NSMetadataQuery
-
10-07-2019 - |
Вопрос
Я создаю 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» (обратите внимание на неправильное написание слова «невидимый»)?