真实文件类型检测

3
嗨,我想在我的应用程序中检测文件类型。libmagic是一个可以实现这个功能的选项。但是我不打算进行字符串比较,例如:
使用libmagic输出的mp3文件:音频文件,带有ID3版本2.3.0,包含:MPEG ADTS,层III,v1,128 kbps,44.1 kHz,JntStereo
还有其他用于真实文件类型检测的库吗?

你需要检测结果的某种结构吗(如mime类型、默认扩展名、详细信息等)? - Serge S.
我只想要数字,如果有的话。 - iyasar
1
我猜当你说数字时,你想要一种可以与常量进行比较的int/enumeration类型? - Benj
例如,对于 MP3 文件 = 0x765 或 .iso 文件 = 0x879 - iyasar
你是否只需要特定的文件类型,例如mp3文件? - ThiefMaster
@ThiefMaster 尽可能不要窃取所有类型的文件。 - iyasar
2个回答

3
你可以尝试使用文件签名表来自己实现这个功能。
例如:
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类型,它不像整数比较那样有效,但比另一种(长文件描述比较)更好。 - iyasar

2

你错误地认为文件类型是可枚举的。这不是文件的工作方式。你关于 .mp3 文件(音频)的例子自然而然地引出了视频。.AVI、.MKV、MPEG1、MPEG2 和 MPEG4 视频之间的关系是什么?你无法用一个数字来捕捉这些关系。

同样地,CD .ISO 文件和 DVD .ISO 文件是相同的文件类型吗?你要么给它们分配相同的编号,要么不给。我在前一句中特别写了“”,因为答案取决于你是否认为它们是相同的。


我选择了MIME类型而不是整数比较。谢谢您的回复。 - iyasar
这仍然不是解决“检测”问题的方法。 - MSalters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接