c-根据幻数查找确定文件类型



是否可以根据文件的幻数来确定文件类型?

如果我已经明白了,神奇的数字可以有不同的大小,也许一本参考词典或图书馆之类的东西可以帮助我?

可以根据文件的幻数来确定文件类型

是的,你可以,因为每种文件格式都有不同的幻数。

例如.jpg文件的FFD8

请参阅此处文件中的幻数

Linux上的file命令正是这样做的。研究它的内部,看看它是如何使用幻数(签名字节)来识别文件的。完整的源代码可在darwinsys.com/file.上找到

以下2个列表是最全面的文件类型及其幻数列表:
-文件签名表
-Linux幻数

JmimeMagic是一个用于此类的java库

使用libmagic(apt-get-install-libmagic-dev在Ubuntu系统上)。

下面的示例使用默认的magic数据库来查询在命令行上传递的文件。(本质上是文件命令的实现。有关更多详细信息/功能,请参阅man libmagic

#include <iostream>
#include <magic.h>
#include <cassert>
int main(int argc, char **argv) {
    if (argc == 1) {
            std::cerr << "Usage "  << argv[0] << " [filename]" << std::endl;
            return -1;
    }
    const char * fname = argv[1];
    magic_t cookie = magic_open(0);
    assert (cookie !=nullptr);
    int rc = magic_load(cookie, nullptr);
    assert(rc == 0);
    auto f=  magic_file(cookie, fname);
    if (f ==nullptr) {
        std::cerr << magic_error(cookie) << std::endl;
    } else {
        std::cout << fname << ' ' << f << std::endl;
    }
}

相关内容

  • 没有找到相关文章

最新更新