代码之家  ›  专栏  ›  技术社区  ›  Peeyush

如何识别文件的文件类型?

  •  1
  • Peeyush  · 技术社区  · 15 年前

    如何确定文件的确切文件类型?为了更好地理解,我将提供更多细节:

    那么现在如何识别文件类型?

    (请使用c/c++、java、python或php(用于web上载)给出您的答案)

    谢谢

    5 回复  |  直到 15 年前
        1
  •  4
  •   tc.    15 年前

    没有“确切的文件类型”这样的东西。二进制数据是二进制数据。

    如果您运行的是类似POSIX的系统,那么可以使用 file

    fileinfo 分机。

        2
  •  1
  •   Daniel Moura    15 年前

    您需要知道要处理的每个文件类型的规范。

    使用此规范,您可以创建一个方法来检查给定文件是否属于特定类型。

    例子:

    isExe(File)
    isJpg(File)
    
        3
  •  0
  •   Alex Pliutau    15 年前

    如果要查找文件扩展名,请尝试使用以下简单代码:

    $ext = pathinfo($filename, PATHINFO_EXTENSION);
    
        4
  •  0
  •   mrk    8 年前

    对于Python:Python魔术库提供

    可以使用安装库

    pip install python-magic
    

    >>> import magic
    
    >>> magic.from_file('sampleone.jpg') 
    'JPEG image data, JFIF standard 1.01'
    
    >>> magic.from_file('sampletwo.png') 
    'PNG image data, 600 x 1000, 8-bit colormap, non-interlaced'
    
        5
  •  0
  •   Nishikant Mokashi    8 年前

    我们无法仅从扩展名识别文件类型。可以很容易地将文件的扩展名从.text更改为.exe,这并不意味着该文件是有效的可执行文件。

    NT的内核模式驱动程序都是PE格式的。

    标头包含一些签名文件:

    e、 g可执行文件在DOS头中总是有MZ(0x5A4D)值,在PE头中总是有PE(0x4550)值。

    考虑.jpg文件:我们使用不同的工具来生成.jpg文件。在创建.jpg文件时,此工具在头文件中添加签名(类似于0xd8ff),并在数据部分中添加有关图像的二进制数据。 打开.jpg文件时,软件读取头字段中的签名,如果找到有效的签名,则根据节中的二进制数据绘制图像。

    类似地,.pdf,.mp3,。。。文件将具有唯一的签名。

    .text文件将没有任何签名。可以从文本文件的第一个偏移量获得数据。

    可以通过以下方式查看标题信息:

    CreateFile(...)//ReadMode
    CreateFileMapping(...)
    MapViewOfFile(...)
    

    IMAGE_DOS_HEADER
    IMAGE_NT_HEADER
    

    签名应与图像\u DOS\u头的e\u魔域匹配,如果是MZ(0x5A4D),则再次与图像\u NT\u头的签名域匹配。