c# sharpziplib добавляющий файл в существующий архив

Это не работало на мой случай Ubuntu AMD 64 12.04 с HP четырехъядерный поршень ПК 5 ГБ. Другие проблемы существовали, и звук исчез после обновлений и другой установки программного обеспечения. Возможно, имела ошибка сценария также? Расположенные нечетные файлы и удаленный из домашней страницы. найденный, что драйвером Kubuntu для ПК с помощью ISO DVD был NVidea MCP61, использовал sudo Кв. - добираются, устанавливают Nvidea MCP61

Расположенные синаптические файлы, которые повредили и попробовали для фиксации их. ООН установила или удалила один, установил другого, обновил третий файл.

Превращенный из ПК и перезапущенный после ожидания обновлений и обновлений установки. На следующий день звуковая установка вернулась к нормальному, и Фиктивной выходной установки не стало.

7
задан Grant 31 August 2009 в 05:57
поделиться

3 ответа

В DotNetZip добавление файлов в существующий zip-архив действительно просто и надежно.

using (var zip = ZipFile.Read(nameOfExistingZip))
{
    zip.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;
    zip.AddFile(additionalFileToAdd);
    zip.Save();
}

Если вы хотите указать путь к каталогу для этого нового файла, используйте другую перегрузку для AddFile ().

using (var zip = ZipFile.Read(nameOfExistingZip))
{
    zip.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;
    zip.AddFile(additionalFileToAdd, "directory\\For\\The\\Added\\File");
    zip.Save();
}

Если вы хотите добавить набор файлов, используйте AddFiles ().

using (var zip = ZipFile.Read(nameOfExistingZip))
{
    zip.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;
    zip.AddFiles(listOfFilesToAdd, "directory\\For\\The\\Added\\Files");
    zip.Save();
}

Вам не нужно беспокоиться о Close (), CloseEntry (), CommitUpdate (), Finish () или любой другой чуши.

15
ответ дан 6 December 2019 в 10:52
поделиться

Кто-то из Codeproject использовал этот код. Единственная разница - закрыть и закончить наоборот, и часть записи:

using (ZipOutputStream s = new
ZipOutputStream(File.Create(txtSaveTo.Text + "\\" +
sZipFileName + ".zip")))
{
    s.SetLevel(9); // 0-9, 9 being the highest compression

    byte[] buffer = new byte[4096];

    foreach (string file in filenames)
    {

        ZipEntry entry = new
        ZipEntry(Path.GetFileName(file));

        entry.DateTime = DateTime.Now;
        s.PutNextEntry(entry);

        using (FileStream fs = File.OpenRead(file))
        {
            int sourceBytes;
            do
            {
                sourceBytes = fs.Read(buffer, 0,
                buffer.Length);

               s.Write(buffer, 0, sourceBytes);

            } while (sourceBytes > 0);
        }
    }
    s.Finish();
    s.Close();
}

BTW:

byte[] byteBuffer = new byte[newFileStream.Length - 1];

                newFileStream.Read(byteBuffer, 0, byteBuffer.Length);

Это неверно, размер - newFileStream.length, иначе чтение идет не так. У вас есть массив, и вы делаете его, например, 10-1 имеет длину 9 байт, от 0 до 8.

Но ваше чтение от 0 до 9 ...

2
ответ дан 6 December 2019 в 10:52
поделиться

Я думаю, ваш вызов Finish должен быть до вашего вызова Close .

Обновление: ] Похоже на известную ошибку . Возможно, это уже было исправлено - вам нужно проверить свою версию SharpZipLib, чтобы узнать, содержит ли она какое-либо исправление. Если нет, вы можете обойти это, скопировав все файлы в новый архив, добавив новый файл, а затем переместив новый архив под старое имя архива.

1
ответ дан 6 December 2019 в 10:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: