2013-12-18 3 views
0

Мне нужно решение для osx 10.6.7+. Я пытаюсь решить проблему поиска «старых» файлов на диске. Старые файлы Я имею в виду файлы, которые начинаются 1 год. Я создал NSPredicate но NSMetadataQuery ничего не возвращаетПоиск старых файлов с использованием NSMetadataQuery

NSPredicate * fileTypePredicate = [NSPredicate predicateWithFormat: @"file_type == \"audio\""]; 
NSPredicate * accessDatePredicate = [NSPredicate predicateWithFormat: @"%K <= %@", @"kMDItemAccessedDates", timeYearBefore]; 
return [NSCompoundPredicate andPredicateWithSubpredicates: @[fileTypePredicate, accessDatePredicate]]; 

Вместо kMDItemAccessedDates я также использовал acess_date, но и без успеха.

ответ

0

Для первого я не знаю, почему вы ожидаете, что «file_type» станет поддерживаемым свойством метаданных.

Существует два свойства для типа содержимого элемента. Один из них - kMDItemContentType, который является непосредственным типом содержимого элемента (как правило, определяется его расширением имени файла). Другой - kMDItemContentTypeTree, который представляет собой массив этого типа и каждого из его предков.

Чтобы найти аудиофайлы, вы хотите найти предметы, у которых kMDItemContentTypeTree равно kUTTypeAudio. (Да, проверка равенства будет работать для этого, даже если вы действительно хотите проверить, содержит ли массив этот тип. Попробуйте его в терминале: mdfind 'kMDItemContentTypeTree == public.audio')

В вашем коде вы должны использовать строку с двумя параметрами, просто как у вас есть для второго предиката, но с == в качестве оператора: @"%K == %@" Для параметров передайте kMDItemContentTypeTree (ключ) и kUTTypeAudio (значение - в этом случае, тип контента - вы ищете).


Что касается второго, я не могу найти ни одного упоминания о каком-либо другом kMDItemAccessedDatesexactly one other Stack Overflow question. Я думаю, что автор этого вопроса мог бы сделать этот ключ для своего импортера Spotlight; вы не можете рассчитывать найти его на складе OS X системы.

Вместо этого вы можете попробовать kMDItemLastUsedDate. (Не записывайте его в виде строкового литерала, в @"…". У вас есть kMDItemLastUsedDate без каких-либо котировок вокруг него или @ перед ним.)

+0

Спасибо. Мне нужно было отложить решение проблем. С прошлого раза я тоже пробовал kMDItemLastUsedDate. В качестве ожидаемого kMDItemLastUsedDate я использовал результат команды mdls файла, где kMDItemLastUsedDate был (2014-02-24 10:24:32). В этом случае предикат был http://pastebin.com/PtCkPHdP, и я нашел 0 результатов :(Любые идеи? – toohtik

+0

@toohtik: У вас есть объект даты ('date' не' nil')? –

+0

yes I Конечно, после печати NSPredicate у меня получилось что-то вроде этого: kMDItemLastUsedDate == CAST (414931838.000000, «NSDate») Также я использовал дату точно в выводе mdls. Если у вас есть свободное время, проверьте мой источник, пожалуйста, http: // cl.ly/1I2C253U230b Мой osx 10.9 Спасибо большое! – toohtik

 Смежные вопросы

  • Нет связанных вопросов^_^