2009-02-06 9 views
1

У меня есть программа на C#, которая использует SharpZIPlib для распаковки некоторых zip-файлов? Он работает нормально, но в одном файле я продолжаю получать ошибку «Неожиданный EOF»? Есть ли на самом деле маркер EOF или файл Zip просто усекается?Что такое маркер EOF для ZIP-файла?

ответ

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

Интересная информация - спасибо. –

+0

DotNetZip (http://dotnetzip.codeplex.com) может дополнительно выполнить полное сканирование zip-файла, игнорируя каталог. Это позволяет восстановить каталог zip из существующих записей zip для поврежденного или усеченного файла. – Cheeso