2015-07-01 5 views
0

Я хочу проверить, поврежден ли почтовый файл перед его распаковкой. Если поврежденный zip-файл открывается вручную, он выдает ошибку. Как это можно сделать в C#, чтобы, если почтовый индекс поврежден, будет выведено исключение.Как проверить, поврежден ли zip-файл с помощью .net 3.5

P.s возможно in .net 4.5. Но мне это нужно в 3,5

Благодаря

+0

Вы можете использовать проверку CRC32. Но вы должны иметь поврежденные и неповрежденные zip-файлы CRC32. Таким образом, вы можете легко их сравнить. –

+0

Спасибо за ответ ... У меня не будет непревзойденного файла для сравнения ... Мне нужно проверить, поврежден ли какой-либо файл zip или нет – user2316771

ответ

4

DotNetZip, бесплатная библиотека с открытым исходным кодом для обработки архивных файлов на языках .NET, поддерживает метод CheckZip(), который делает то, что вы хотите. По вашему выбору доступны различные уровни уверенности. Базовый уровень просто проверяет согласованность метаданных. Самый полный уровень делает полное извлечение zip-файла в битбакет, чтобы убедиться, что фактические сжатые данные не повреждены.

Update:

Section 4.3.7 of this page говорит, что сжатый размер 4 байта, начиная с байта 18. Вы можете попробовать чтение, что и сравнивая его с размером в файл.

Однако, я думаю, что это в значительной степени бесполезными для проверки, если почтовый файл поврежден по двум причинам:

  1. Некоторые файлы почтового индекса содержат больше байт, чем просто почтовый части. Для примера , self-extracting archives есть исполняемые части они все еще действительны zip.

  2. Файл может быть поврежден без изменения его размера. Итак, я предлагаю , вычисляя CRC для гарантированного метода проверки на коррупции.

+0

Спасибо за ответ ... ну, мне нужна логика, как выполнение действие в zip-файле должно вызывать исключение, если оно повреждено ... как я упоминал при открытии вручную, оно вызывает ошибку ... некоторая логика для репликации такого поведения - это то, что я хочу ... – user2316771

+0

Ваш прием, я обновил мою ответьте, пожалуйста, пожалуйста :) –

Смежные вопросы