测试文件以查看其zip文件的好方法是什么?

时间:2009-12-11 10:05:43

标签: c++ file-io compression unzip

我看起来是一个新的文件格式规范,规范说该文件可以是基于xml的文件,也可以是包含xml文件和其他文件的zip文件。

两种情况下的文件扩展名都相同。我可以通过哪些方法测试文件以确定它是否需要解压缩或只是阅读?

9 个答案:

答案 0 :(得分:19)

zip文件格式由PKWARE定义。您可以找到他们的文件规范here

在顶部附近,您会找到标题规范:

  

一个。本地文件头:

    local file header signature     4 bytes  (0x04034b50)
    version needed to extract       2 bytes
    general purpose bit flag        2 bytes
    compression method              2 bytes
    last mod file time              2 bytes
    last mod file date              2 bytes
    crc-32                          4 bytes
    compressed size                 4 bytes
    uncompressed size               4 bytes
    file name length                2 bytes
    extra field length              2 bytes

    file name (variable size)
    extra field (variable size)

从这里你可以看到标题的前4个字节应该是文件签名,它应该是十六进制值0x04034b50。文件中的字节顺序是另一种方式 - PKWARE指定“除非另有说明,否则所有值都以小端字节顺序存储。”,因此如果使用十六进制编辑器查看文件,您将看到50 4b 03 04 as前4个字节。

您可以使用它来检查您的文件是否是zip文件。如果在记事本中打开文件,您会注意到前两个字节(50和4b)是ASCII字符PK。

答案 1 :(得分:12)

您可以查看该文件的magic number。 ZIP存档的列表位于ZIP format wikipedia pagePK\003\004 or PK\005\006

答案 2 :(得分:1)

检查magic number文件的前几个字节。 Zip文件以PK开头(50 4B)。由于XML文件无法以这些字符开头且仍然有效,因此您可以非常确定文件类型。

答案 3 :(得分:1)

File magic numbers

澄清一下,它以50 4b 03 04开始。

http://www.pkware.com/documents/casestudies/APPNOTE.TXT(来自Simon P Stevens)

答案 4 :(得分:1)

您可以使用file查看它是文本文件(xml)还是可执行文件(zip)。 向下滚动以查看示例。

答案 5 :(得分:1)

虽然不是一个好的解决方案,但只是大声思考......怎么样:

try
{
LoadXmlFile(theFile);//Exception if not an xml file
}
catch(Exception ex)
{
LoadZipFile(theFile)
}

答案 6 :(得分:1)

您可以检查文件以查看它是否包含有效的XML标头。如果没有,请尝试解压缩。

请参阅Click here for XML specification.

答案 7 :(得分:0)

你可以尝试解压缩它 - 一个XML文件极不可能是一个有效的zip文件,或者可以检查神奇的数字,正如其他人所说的那样。

答案 8 :(得分:0)

这取决于你使用的是什么,但是zip库可能有一个测试文件是否是zip文件的函数 比如is_zip,test_file_zip或者其他......

或使用上面给出的幻数创建你自己的函数。