Помощь в создании Zip-файлов из .Net и чтении их из Java - PullRequest
4 голосов
/ 16 сентября 2008

Я пытаюсь создать Zip-файл из .Net, который можно прочитать из кода Java.

Я использовал SharpZipLib для создания Zip-файла, но также, если сгенерированный файл действителен в соответствии с функцией CheckZip библиотеки #ZipLib и может быть успешно распакован с помощью WinZip или WinRar. При попытке распаковать его всегда возникает ошибка используя класс Java.Utils.Zip в Java.

Кажется, проблема в неправильном заголовке, написанном SharpZipLib. Я также разместил вопрос на форуме SharpDevelop, но без результатов (см. http://community.sharpdevelop.net/forums/t/8272.aspx для информации), но без результата.

Есть ли у кого-нибудь пример кода сжатия Zip-файла с помощью .Net и распаковки его с помощью класса Java.Utils.Zip?

С уважением Massimo

Ответы [ 6 ]

8 голосов
/ 16 сентября 2008

Я использовал Библиотека DotNetZip , и она, кажется, работает правильно. Типичный код:

using (ZipFile zipFile = new ZipFile())
{
  zipFile.AddDirectory(sourceFolderPath);
  zipFile.Save(archiveFolderName);
}
3 голосов
/ 18 марта 2009

У меня была такая же проблема: создание zips с SharpZipLib (последняя версия) и распаковка с java.utils.zip.

Вот что решило проблему для меня. Мне пришлось принудительно исключить использование zip64:

ZipOutputStream s = new ZipOutputStream(File.Create(someZipFileName))

s.UseZip64 = UseZip64.Off;
2 голосов
/ 04 января 2009

Вы не хотите использовать класс ZipPackage в .NET - это не совсем стандартная модель zip. Что ж, это так, но это предполагает определенную структуру в файле, с манифестом с известным именем и так далее. ZipPackage, похоже, был оптимизирован для документов Office и XPS.

Сторонняя библиотека, такая как http://www.codeplex.com/DotNetZip,, вероятно, будет лучшим выбором, если вы делаете ZIP-файлы общего назначения и хотите хорошую совместимость.

DotNetZip создает файлы, которые очень совместимы практически со всем, включая Java java.utils.zip. Но будьте осторожны, используя функции, которые не поддерживает Java, такие как ZIP64 или Unicode. Я думаю, что ZIP64 полезен только для очень больших архивов, которые Java не поддерживает в настоящее время. Java поддерживает Unicode определенным образом, поэтому, если вы создаете ZIP-файл на основе Unicode с помощью DotNetZip, вам просто нужно следовать нескольким правилам, и он будет работать нормально.

2 голосов
/ 16 сентября 2008

Не могу помочь с SharpZipLib, но вы можете попробовать создать zip-файл, используя ZipPackage class System.IO.Packaging без использования библиотек третьей части (требуется .NET 3+) .

1 голос
/ 28 января 2009

У меня была похожая проблема с разархивированием файлов SharpZipLib-zip в Linux. Я думаю, что я решил это (хорошо я работаю на Linux и Mac сейчас, я проверял это), проверьте мой блог: http://igorbrejc.net/development/c/sharpziplib-making-it-work-for-linuxmac

1 голос
/ 16 сентября 2008

Чтобы определить, действительно ли это соответствующий ZIP-файл, см. Спецификацию формата файла PKZIP .ZIP .

Что бы это ни стоило, у меня не было проблем с использованием SharpZipLib для создания ZIP-файлов на устройстве Windows Mobile и открытия их с помощью встроенной функции сжатых папок WinZip или Windows XP, а также без проблем при создании ZIP-файлов на рабочем столе с помощью SharpZipLib и обработке их с моей собственной утилитой извлечения ZIP (в основном оболочка вокруг zlib) на мобильном устройстве.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...