gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:35:17 27 4
gpt4 key购买 nike

在*nix 系统中有一个名为'file' 的命令,它可以告诉您文件的底层类型。比方说,如果您将二进制可执行文件的名称重命名为 foo.txt,或者将 mp3 文件重命名为 .txt,系统将始终告诉您文件的真实类型。但是在Windows中,好像没有这样的功能,如果将可执行文件重命名为.txt,则无法执行。任何人都可以向我解释这是如何在 *nix 系统中完成的,以及我如何使用 C++ 找到文件的真实类型,尤其是在我不能使用 std::system("file blah") 的 Windows 中?

最佳答案

文件实用程序使用 libmagic 库。它识别文件类型解析文件中的“特殊”字段。
当然,您可以自己编程识别某些格式,但有时这需要大量工作。例如。当您尝试区分不同格式的 MP4 时。

该库的开发人员做了大量工作。因此,如果你想让上帝的结果说明你处理的是什么类型的格式,建议使用他们的结果。(这是一个很大的范围,真的,如果知道你正在使用什么类型的格式,最好依靠他们然后依靠你的代码)

文件实用程序 - http://www.darwinsys.com/file/
您可以下载源代码并查看它们使用了多少种不同的识别类型。下载归档文件 4.26 -> magic -> Magdir

就我个人而言,我很幸运能够在 Windows 上编译文件 4.26 ftp://ftp.astron.com/pub/file/

注意
这只是一种约定,某些格式的文件应该有预定义的签名,这几乎总是正确的,并且有助于正确识别文件格式。如果不是问题,您当然可以信任签名。但请记住,任何有足够知识和愿望的人都可以在十六进制编辑器中打开文件并使用位来创建另一种格式的文件。

关于c++ - 如何在 C++ 中找到基础文件类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24750375/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com