ZIP 文件的 EOF 标记是什么?

What is the EOF marker for a ZIP file?

提问人:Kevin 提问时间:2/6/2009 最后编辑:BinaryMisfitKevin 更新时间:10/19/2009 访问量:4132

问:

我有一个使用 SharpZIPlib 解压缩一些 zip 文件的 C# 程序?它工作正常,但在一个文件上,我一直收到“意外的 EOF”错误?是否真的有EOF标记,或者Zip文件只是被截断了?

C# ZIP 文件格式 EOF

评论


答:

6赞 Jonathan Leffler 2/6/2009 #1

您的文件被截断(或可能被扩展或以其他方式损坏)。

您可以在其上运行常规的解压缩程序(例如“”)来证明这一点。unzip -l file.zip

顺便说一句,如果您使用 FTP 下载文件,您是否记得使用二进制传输?如果您(不小心)使用了ASCII模式,这将破坏任何二进制文件,例如ZIP存档。

2赞 Otávio Décio 2/6/2009 #2

意外的 EOF 正是这个意思:在读取文件时,函数遇到了文件的末尾,而库正在期待其他东西(数据)。它不是标记。

4赞 Martin Plante 2/7/2009 #3

一个简单的ZIP文件如下所示:

LocalHeader1
CompressedData1
LocalHeader2
CompressedData2
[...]
LocalHeaderN
CompressedDataN
CentralHeader1
CentralHeader2
[...]
CentralHeaderN
EndHeader

EndHeader 包含(除其他外)到第一个 CentralHeader 的偏移量,然后每个 CentralHeader 都包含与其匹配的 LocalHeader 的偏移量。

某些库可以从头开始读取 zip 文件以按顺序处理 LocalHeaders,从而恢复可以从损坏的 zip 文件中恢复的内容。

评论

0赞 Cheeso 10/22/2009
DotNetZip (dotnetzip.codeplex.com) 可以选择对 zip 文件进行完全扫描,而忽略该目录。这允许您从现有 zip 条目为损坏或截断的文件重建 zip 目录。
1赞 Cheeso 2/10/2009 #4

你试过DotNetZip吗?http://www.codeplex.com/DotNetZip