如何在C中找到基础文件类型?

在* nix系统中有一个名为’file’的命令,它可以告诉你文件的基础类型.比如,如果将二进制可执行文件的名称重命名为foo.txt,或者将mp3文件重命名为.txt,系统将始终告诉您文件的真实类型.但是在
Windows中,似乎没有这样的功能,如果将可执行文件重命名为.txt,则无法执行它.任何人都可以向我解释这是如何在* nix系统中完成的,我怎样才能找到使用C的文件的真实类型,特别是在windows中,我不能使用std :: system(“file blah”)? 最佳答案 文件实用程序使用libmagic库.它识别文件类型解析文件中的“特殊”字段.

当然,您可以自己编程识别某些格式,但有时这需要大量的工作.例如.当您尝试区分不同格式的MP4时.

该图书馆的开发人员做了大量的工作.因此,如果你希望得到上帝的结果来说明你处理什么类型的格式,建议使用他们的结果.(这是一个很大的领域,真的,如果你知道你正在使用什么类型的格式,那么更好地依赖它们然后在你的码)

文件实用程序 – http://www.darwinsys.com/file/
您可以下载源代码并查看他们使用的真正多种不同的识别类型.
下载档案文件-4.26 – >魔术 – > Magdir

我个人幸运地在Windows ftp://ftp.astron.com/pub/file/上编译文件4.26

注意这仅仅是一种惯例,某些格式的文件应该具有预定义的签名,并且它几乎总是如此,并且有助于正确识别文件格式.
如果不是关注点,你肯定可以信任签名.但请记住,任何有足够知识和愿望的人都可以在十六进制编辑器中打开文件并使用位进行另一种格式的文件.

点赞