测试文件是否为 zip 文件的好方法是什么?
我正在寻找新的文件格式规范,该规范表示该文件可以是基于 xml 的文件,也可以是包含 xml 文件和其他文件的 zip 文件。
两种情况下的文件扩展名相同。我可以通过哪些方式测试文件来决定是否需要解压缩或只是读取?
I am looking as a new file format specification and the specification says the file can be either xml based or a zip file containing an xml file and other files.
The file extension is the same in both cases. What ways could I test the file to decide if it needs decompressing or just reading?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
zip 文件格式由 PKWARE 定义。您可以在此处找到其文件规范。
在顶部附近,您将找到标头规范:
从这里可以看出,头的前4个字节应该是文件签名,应该是十六进制值0x04034b50。文件中的字节顺序是相反的 - PKWARE 指定“除非另有指定,否则所有值都以小端字节顺序存储。”,因此如果您使用十六进制编辑器查看文件,您将看到 50 4b 03 04 作为前 4 个字节。
您可以使用它来检查您的文件是否是 zip 文件。如果您在记事本中打开该文件,您会注意到前两个字节(50 和 4b)是 ASCII 字符 PK。
The zip file format is defined by PKWARE. You can find their file specification here.
Near the top you will find the header specification:
From this you can see that the first 4 bytes of the header should be the file signature which should be the hex value 0x04034b50. Byte order in the file is the other way round - PKWARE specify that "All values are stored in little-endian byte order unless otherwise specified.", so if you use a hex editor to view the file you will see 50 4b 03 04 as the first 4 bytes.
You can use this to check if your file is a zip file. If you open the file in notepad, you will notice that the first two bytes (50 and 4b) are the ASCII characters PK.
您可以查看文件的幻数。 ZIP 存档的内容列于 ZIP 格式维基百科页面:
PK\003\004 或 PK\005\006
。You could look at the magic number of the file. The ones for ZIP archives are listed on the ZIP format wikipedia page:
PK\003\004 or PK\005\006
.检查文件的前几个字节中的幻数。 Zip 文件以 PK (50 4B) 开头。由于 XML 文件无法以这些字符开头并且仍然有效,因此您可以相当确定文件类型。
Check the first few bytes of the file for the magic number. Zip files begin with PK (50 4B). As XML files cannot start with these characters and still be valid, you can be fairly sure as to the file type.
您可以使用 file 来查看它是文本文件(xml)还是可执行文件(拉链)。
向下滚动查看示例。
You can use file to see if it's a text file(xml) or an executable(zip).
Scroll down to see an example.
虽然这不是一个好的解决方案,但只是想减轻负担......怎么样:
Not a good solution though, but just thinking out load... how about:
您可以检查该文件以查看它是否包含有效的 XML 标头。如果没有,请尝试解压。
请参阅单击此处了解 XML 规范。
You could check the file to see if it contains a valid XML header. If it doesn't, try decompressing it.
See Click here for XML specification.
文件幻数
澄清一下,它以 50 开头4b 03 04.
请参阅 http://www.pkware.com/documents/casestudies/APPNOTE .TXT(来自西蒙·P·史蒂文斯)
File magic numbers
To clarify, it starts with 50 4b 03 04.
See http://www.pkware.com/documents/casestudies/APPNOTE.TXT (From Simon P Stevens)
您可以尝试解压缩它 - XML 文件极不可能是有效的 zip 文件,或者可以检查幻数,正如其他人所说。
You could try unzipping it - an XML file is exceedingly unlikely to be a valid zip file, or could check the magic numbers, as others have said.
这取决于你使用的是什么,但 zip 库可能有一个函数来测试文件是否是 zip 文件
像 is_zip、test_file_zip 之类的东西...
或者使用上面给出的幻数创建您自己的函数。
it depends on what you are using but the zip library might have a function that test wether a file or not is a zip file
something like is_zip, test_file_zip or whatever ...
or create you're own function by using the magic number given above.