У меня есть программа на C#, которая использует SharpZIPlib для распаковки некоторых zip-файлов? Он работает нормально, но в одном файле я продолжаю получать ошибку «Неожиданный EOF»? Есть ли на самом деле маркер EOF или файл Zip просто усекается?Что такое маркер EOF для ZIP-файла?
ответ
Ваш файл был усечен (или, возможно, продлен или иным образом поврежден).
Вы можете запустить обычную программу распаковки на нем (например, «unzip -l file.zip
»), чтобы это доказать.
Кстати, если вы использовали FTP для загрузки файла, не помните ли вы использовать двоичный перевод? Если вы случайно использовали режим ASCII, это испортит любой двоичный файл, такой как ZIP-архив.
Неожиданное EOF означает именно это: при чтении файла функция столкнулась с окончанием файла, и библиотека ожидала чего-то еще (данных). Это не маркер.
Простой ZIP-файл выглядит следующим образом:
LocalHeader1
CompressedData1
LocalHeader2
CompressedData2
[...]
LocalHeaderN
CompressedDataN
CentralHeader1
CentralHeader2
[...]
CentralHeaderN
EndHeader
EndHeader содержит (помимо прочего) смещение первого CentralHeader, то каждый CentralHeader содержит смещение их соответствия LocalHeader.
Некоторые библиотеки могут считывать zip-файл с самого начала, чтобы обрабатывать LocalHeaders последовательно, таким образом восстанавливая то, что может быть восстановлено поврежденным zip-файлом.
Вы пробовали DotNetZip? http://www.codeplex.com/DotNetZip
Интересная информация - спасибо. –
DotNetZip (http://dotnetzip.codeplex.com) может дополнительно выполнить полное сканирование zip-файла, игнорируя каталог. Это позволяет восстановить каталог zip из существующих записей zip для поврежденного или усеченного файла. – Cheeso