从内容而不是从扩展名中获取文件类型[重复]
Posted
技术标签:
【中文标题】从内容而不是从扩展名中获取文件类型[重复]【英文标题】:Get a file type from the contents and NOT from extension [duplicate] 【发布时间】:2011-06-08 00:12:35 【问题描述】:可能重复: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 从扩展名返回文件类型。
还有其他方法可以从文件的基础内容中返回确切的类型吗?
【问题讨论】:
【参考方案1】:有MagicKit.framework,它是libmagic
的包装。 (这是file
命令使用的)。在我的测试中,它确定 UTI 可能需要做一些工作,但这可能是一个好的开始。
大多数启动服务 API 等不会在内部查看文件的数据,AFAIK。也就是说,实际处理此类数据的框架(在本例中为图像数据,ImageIO.framework、NSImage 等)通常可以处理此类差异。 (例如,将 PNG 文件扩展名更改为 .gif,Preview.app 仍然会很乐意打开它。)
【讨论】:
我找到了解决方案。您需要使用 Core Graphics 框架获取文件的元数据。【参考方案2】:CGImageSourceRef source = CGImageSourceCreateWithURL( (CFURLRef) URL, NULL);
NSDictionary* metadata = (NSDictionary *)CGImageSourceCopyPropertiesAtIndex(source,0,NULL);
【讨论】:
别忘了释放这些对象。以上是关于从内容而不是从扩展名中获取文件类型[重复]的主要内容,如果未能解决你的问题,请参考以下文章