提问人:Kevin 提问时间:2/6/2009 最后编辑:BinaryMisfitKevin 更新时间:10/19/2009 访问量:4132
ZIP 文件的 EOF 标记是什么?
What is the EOF marker for a ZIP file?
问:
我有一个使用 SharpZIPlib 解压缩一些 zip 文件的 C# 程序?它工作正常,但在一个文件上,我一直收到“意外的 EOF”错误?是否真的有EOF标记,或者Zip文件只是被截断了?
答:
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
评论