ZIP文件的EOF标记是什么?

时间:2009-02-06 14:49:47

标签: c# zip file-format eof

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

4 个答案:

答案 0 :(得分:6)

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

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

顺便提一下,如果你使用FTP下载文件,你还记得使用二进制传输吗?如果您(意外地)使用了ASCII模式,那将破坏任何二进制文件,例如ZIP存档。

答案 1 :(得分:4)

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

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

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

有些库可以从头开始读取zip文件,依次处理LocalHeaders,从而恢复损坏的zip文件可以恢复的内容。

答案 2 :(得分:2)

意外的EOF意味着:在读取文件时,函数遇到了文件的结尾,而库正在等待其他东西(数据)。它不是标记。

答案 3 :(得分:1)

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