在Cocoa中,我正在尝试获取文件类型,I.E。 JPG,JPEG或PNG,使用
LSCopyKindStringForURL((CFURLRef)URL, (CFStringRef *)&kind);
仅当文件扩展名有效时才有用。但是,如果我将PNG文件扩展名重命名为JPEG,则返回JPEG,因为LSCopyKindStringForURL从扩展名返回文件类型。
是否还有其他方法可以从文件的基础内容返回确切的类型?
答案 0 :(得分:1)
有MagicKit.framework,它是libmagic
的包装。 (这是file
命令使用的)。在我的测试中,它对UTI的确定可能会使用一些工作,但这可能是一个好的开始。
大多数Launch Services API等都不会在内部查看文件的数据AFAIK。也就是说,实际处理此类数据的框架(在这种情况下是图像数据,ImageIO.framework,NSImage等)通常可以应对这种差异。 (例如,将PNG文件扩展名更改为.gif,而Preview.app仍然会很乐意将其打开。)
答案 1 :(得分:0)
CGImageSourceRef source = CGImageSourceCreateWithURL( (CFURLRef) URL, NULL);
NSDictionary* metadata = (NSDictionary *)CGImageSourceCopyPropertiesAtIndex(source,0,NULL);