【问题标题】:True File Type Detection真正的文件类型检测
【发布时间】:2012-04-26 21:23:02
【问题描述】:

您好,我想检测应用程序中的文件类型。 libmagic 是一种选择。但我不打算进行字符串比较,例如

使用 libmagic 输出的 mp3 文件:ID3 版本 2.3.0 的音频文件,包含:MPEG ADTS,第三层,v1,128 kbps,44.1 kHz,JntStereo

还有其他用于真正文件类型检测的库吗?

任何帮助将不胜感激。

【问题讨论】:

  • 您是否需要某种结构作为检测(mime-type, default extension, details, etc)的结果?
  • 我只想要可用的数字。
  • 我想当你说数字时,你想要某种可以与常数比较的 int/enumeration?
  • 例如 mp3 文件 = 0x765 或 .iso 文件 = 0x879
  • 您只需要特定的文件类型,例如 mp3 文件吗?

标签: c++ c file-type


【解决方案1】:

您可以尝试使用 File Signature Table 自己实现此功能

例子:

Hex Signature        File Extension           ASCII Signature, File Description

49 44 33                        MP3           ID3
                                              MPEG-1 Audio Layer 3 (MP3) audio file

43 44 30 30 31                  ISO           CD001
                                              ISO-9660 CD Disc Image
                                              This signature usually ...

【讨论】:

  • 那将是完美的,但我们这里有可维护性问题。开发人员必须始终对该文件感兴趣才能进行维护。我确实选择了mime-type,它不像整数比较那样有效,但另一个更好(长文件描述的比较。)。
【解决方案2】:

您错误地认为文件类型集是可枚举的。这不是文件的工作方式。您关于 .mp3 文件(音频)的示例自然会导致视频。 .AVI、.MKV、MPEG1、MPEG2 和 MPEG4 视频之间有什么关系?你不能用一个数字来捕捉这些关系。

同样,CD .ISO 与 DVD .ISO 的文件类型相同吗?要么你分配你没有分配相同的数字。而我在上一句中特意写了“you”,因为答案取决于you是否认为它们相同。

【讨论】:

  • 我确实选择了 mime 类型而不是整数比较。感谢您的回复。
  • 这仍然无法解决检测问题。
猜你喜欢
  • 2010-10-01
  • 2016-10-04
  • 2016-05-23
  • 2015-01-15
  • 1970-01-01
  • 2010-11-09
  • 2013-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多