使用NSMetadataQuery查找旧文件

时间:2013-12-18 09:39:49

标签: macos cocoa osx-snow-leopard

我需要osx 10.6.7+的解决方案。我试图解决在磁盘上搜索“旧”文件的问题。旧文件我的意思是1年前的文件。 我创建了NSPredicate,但NSMetadataQuery没有返回任何内容

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

我还使用了acess_date而没有成功,而不是kMDItemAccessedDates。

1 个答案:

答案 0 :(得分:0)

对于第一个,我不知道为什么你希望“file_type”成为受支持的元数据属性。

项目的内容类型有两个属性。一个是kMDItemContentType,它是项目内容的直接类型(通常由文件扩展名确定)。另一个是kMDItemContentTypeTree,它是该类型的数组及其每个祖先。

要查找音频文件,您需要查找kMDItemContentTypeTree等于kUTTypeAudio的项目。 (是的,即使您真的想测试数组是否包含类型,否则相等测试将适用于此。在终端中尝试:mdfind 'kMDItemContentTypeTree == public.audio'

在您的代码中,您应该使用双参数格式字符串,就像您对第二个谓词一样,但使用==作为运算符:@"%K == %@"对于参数,传递{{1} (键)和kMDItemContentTypeTree(值 - 在这种情况下,内容类型 - 您正在寻找)。


至于第二个问题,我在kUTTypeAudio其他任何地方都找不到kMDItemAccessedDates。我认为这个问题的作者可能已经为他的自定义Spotlight导入器做了关键;你不能指望在股票OS X系统上找到它。

您可以尝试使用kMDItemLastUsedDate。 (不要在@"…"中将其写成字符串文字 - 只要kMDItemLastUsedDate没有任何引号或者前面有@。