什么是测试一个文件,看看它的ZIP文件的好办法?
-
19-09-2019 - |
题
我期待作为新的文件格式规范和说明书说该文件可以是基于XML或含有一个XML文件和其他文件的zip文件。
在文件的扩展名是在两种情况下是相同的。用什么方法可以我对文件进行测试,以决定是否需要解压缩或只是读?
解决方案
压缩文件格式由PKWARE定义。你可以找到自己的文件规范 rel="noreferrer">。
近顶端你会发现头规格:
一个。本地文件头:
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指定“的所有值都存储在little-endian字节顺序进行,除非另有规定。”,因此,如果您使用十六进制编辑器来查看该文件,你会看到50 4B 03 04为前4个字节。
您可以用它来检查,如果你的文件是一个zip文件。如果打开在记事本文件,你会发现,前两个字节(50和图4b)是ASCII字符的PK。
其他提示
您可以看一下幻数文件。对于ZIP压缩文件的那些列在 ZIP格式的维基百科页面:PK\003\004 or PK\005\006
检查的幻数。 Zip文件开始PK(50 4B)。由于XML文件无法使用这些字符开始,仍然是有效的,你可以相当肯定,以文件类型。
您可以使用文件,看它是否是一个文本文件(XML)或可执行(拉链)。 向下滚动以查看一个例子。
不是一个很好的解决方案,虽然,但只是想大声...怎么样:
try
{
LoadXmlFile(theFile);//Exception if not an xml file
}
catch(Exception ex)
{
LoadZipFile(theFile)
}
您可以检查文件,看它是否包含一个有效的XML头。如果没有,尝试解压缩它。
请参阅按此XML规范。
您可以尝试解压缩它 - 一个XML文件是极不可能是一个有效的zip文件,或者可以检查幻数,如其他人所说
。这取决于您使用,但压缩库可能有测试阉文件的功能或没有什么是zip文件 像is_zip,test_file_zip或任何...
或使用上面给出的幻数创建你自己的功能。