2009-02-06 152 views
1

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

回答

6

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

你可以运行常规的解压程序(如'unzip -l file.zip')来证明这一点。

顺便说一句,如果您使用FTP下载文件,您是否记得使用二进制传输?如果您(意外)使用ASCII模式,那么将破坏任何二进制文件,如ZIP压缩文件。

2

意外的EOF意味着:读取文件时,该函数遇到文件的结尾,并且库期待其他数据(数据)。这不是一个标记。

4

一个简单的ZIP文件看起来像这样:

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

的EndHeader包含(除其他事项外)偏移到第一CentralHeader,则每个CentralHeader包含一个偏移到其匹配LocalHeader。

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

+0

有趣的信息 - 谢谢。 – 2009-02-06 22:08:56