从内容中获取文件类型,而不是从扩展中获取

时间:2011-01-12 17:46:43

标签: objective-c cocoa

  

可能重复:
  How can you read a files MIME-type in objective-c

在Cocoa中,我正在尝试获取文件类型,I.E。 JPG,JPEG或PNG,使用

LSCopyKindStringForURL((CFURLRef)URL, (CFStringRef *)&kind);

仅当文件扩展名有效时才有用。但是,如果我将PNG文件扩展名重命名为JPEG,则返回JPEG,因为LSCopyKindStringForURL从扩展名返回文件类型。

是否还有其他方法可以从文件的基础内容返回确切的类型?

2 个答案:

答案 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);