Что такое маркер EOF для файла ZIP? - PullRequest
1 голос
/ 06 февраля 2009

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

Ответы [ 4 ]

6 голосов
/ 06 февраля 2009

Ваш файл был усечен (или, возможно, расширен или поврежден).

Вы можете запустить обычную программу распаковки (скажем 'unzip -l file.zip'), чтобы доказать это.

Кстати, если вы использовали FTP для загрузки файла, вы не забыли использовать двоичную передачу? Если вы (случайно) использовали режим ASCII, это испортит любой двоичный файл, такой как ZIP-архив.

4 голосов
/ 06 февраля 2009

Простой ZIP-файл выглядит так:

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

EndHeader содержит (среди прочего) смещение к первому CentralHeader, затем каждый CentralHeader содержит смещение к соответствующему LocalHeader.

Некоторые библиотеки могут с самого начала считывать zip-файл для последовательной обработки LocalHeaders, восстанавливая, таким образом, то, что можно восстановить из поврежденного zip-файла.

2 голосов
/ 06 февраля 2009

Неожиданный EOF означает именно то, что: при чтении файла функция обнаружила конец файла, и библиотека ожидала чего-то другого (данных). Это не маркер.

1 голос
/ 10 февраля 2009

Вы пробовали DotNetZip? http://www.codeplex.com/DotNetZip

...