访问单个文件的元数据

时间:2012-03-24 19:33:48

标签: objective-c macos cocoa metadata nsmetadataquery

有没有办法以编程方式访问MacOS上单个文件的元数据?

我知道Apple提供NSMetadataQuery,但它似乎只允许在特定文件夹中搜索以查找与某些参数匹配的文件。实际上我不想搜索匹配的所有文件,但检查特定文件是否匹配。

是否有办法或唯一的解决方案是分析查询结果并查看我的文件是否在其中?

2 个答案:

答案 0 :(得分:4)

您可以使用命令mdls获取其数据的相同方式获取元数据。在文档中搜索MDItemCreate。 (您会发现:核心库 - >数据管理 - >文件管理 - > MDItem参考
我希望以下创建元数据字典的方法能够满足您的需求:

- (NSDictionary *) metaDataDictionaryForFileAt:(NSString *)fileName
{
    MDItemRef item = MDItemCreate( kCFAllocatorDefault, (CFStringRef)fileName );
    if( item==nil ) return nil;

    CFArrayRef list = MDItemCopyAttributeNames( item );
    NSDictionary *resDict = (NSDictionary *)MDItemCopyAttributes( item, list );
    CFRelease( list );
    CFRelease( item );
    return [resDict autorelease];
}

备注kMDItemContentTypekMDItemContentTypeTreekMDItemKind的值由文件名的后缀而不是文件内容决定!< / p>

答案 1 :(得分:1)

我认为没有这方面的API(这很奇怪,你应该提交一个bug)。如果您不想运行查询,那么您唯一的另一个选择是使用NSTask生成mdls命令的实例,然后解析结果。