sharpziplib - можете ли вы добавить файл без предварительного копирования всего zip-файла? - PullRequest
2 голосов
/ 07 июня 2010

Я пытаюсь добавить файл в существующий файл .zip с помощью sharpziplib - проблема в том, что размер файла zip составляет 1 ГБ. Когда я пытаюсь добавить 1 маленький файл (400 КБ) sharpziplib создает копию / временную папку для файла оригинального zip перед добавлением нового файла - это создает проблему, когда объем свободного места на диске меньше, чем в 2 раза больше файла zip, который вы пытаетесь создать. обновить.

например: 1 ГБ почтовый индекс myfile.zip 1 ГБ zip myfile.zip.tmp.293

ZipFile zf = new ZipFile(path);
zf.BeginUpdate();
zf.Add(file);   // Adding a 400k file here causes a 1GB temp file to be created
zf.EndUpdate();
zf.Close();

Есть ли более эффективный способ сделать это?

Спасибо: -)

Ответы [ 2 ]

3 голосов
/ 08 июня 2010

Нашел ответ:

http://community.sharpdevelop.net/forums/p/5934/17056.aspx#17056

Привет

Если вы создаете новый Zip-архив это может быть проще в использовании Вместо этого класс ZipOutputStream.

Если вы обновляете, вы можете получить Класс ZipFile для записи непосредственно в существующий архив на диске, если вы выбирать. IArchiveStorage (Библиотека поставляет DiskArchiveStorage) является ключевой интерфейс передан, когда BeginUpdate называется. У него есть UpdateMode свойство, которое может быть установлено в Safe или Непосредственный.

Последствия очевидны с надеждой. Сбой во время обновления может испортить архив, потеряв данные.

hth, -jr-

0 голосов
/ 07 июня 2010

Если вы создаете zip-файл с нуля, используйте ZipOutputStream вместо ZipFile. Вы можете найти пример этого в источниках SharpZipLib . Я не уверен, поддерживает ли ZipOutputStream добавление в существующий zip-файл, поэтому, если вы этим занимаетесь, боюсь, у меня нет полезного ответа.

...