访问单个文件的元数据

3

有没有一种在MacOS上编程访问单个文件元数据的方法?

我知道Apple提供了NSMetadataQuery,但它似乎只允许在特定文件夹中搜索符合某些参数的文件。实际上,我希望不要查找所有匹配的文件,而是检查一个特定的文件是否匹配。

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

2个回答

5
您可以像命令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];
}
< p > 备注:文件名后缀决定了kMDItemContentTypekMDItemContentTypeTreekMDItemKind的值,而不是文件内容!


1

我认为这个没有API(这很奇怪,你应该报告一个错误)。如果你不想运行查询,那么你唯一的选择就是使用NSTask来生成mdls命令的实例,然后解析结果。


是的,我在想另一种可能性,但我不知道哪个更糟... :) 此外,我可能需要进行这种检查数百或数千次。也许,将搜索路径限制为文件较少的文件夹,查询应该不会太昂贵(即使非常烦人)... - Manlio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接