【问题标题】: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 从扩展名返回文件类型。

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

【问题讨论】:

    标签: objective-c cocoa


    【解决方案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);
    

    【讨论】:

    • 别忘了释放这些对象。
    猜你喜欢
    • 2011-07-29
    • 2012-08-08
    • 2014-05-30
    • 2017-01-08
    • 2010-11-05
    • 1970-01-01
    • 2011-05-27
    相关资源
    最近更新 更多