Feedback

C# - Dateien in ZIP File packen mit der SharpZipLib

Veröffentlicht von am 21.07.2007
(5 Bewertungen)
Diese Methode packt alle übergebenen Dateien in ein ZIP Archiv.

Nach dem Download der ICSharpCode.SharpZipLib.dll von http://www.icsharpcode.net/OpenSource/SharpZipLib/Download.aspx muss dem Projekt ein Verweis zu dieser DLL hinzugefügt werden.
Die folgenden Usings müssen verwendet werden:

using System;
using System.IO;
using System.Collections.Generic;
using ICSharpCode.SharpZipLib.Checksums;
using ICSharpCode.SharpZipLib.Zip;
GFU-Schulungen  [Anzeige]

C# 2017/2015/2013 Grundlagen

Nach Abschluss des Kurses sind Ihnen die Datentypen und Klassenbibliotheken von C# bekannt. Außerdem sind Sie in der Lage, mit Variablen umzugehen und deren Typen zu konvertieren. Sie definieren Namespaces und setzen diese ein, Sie erstellen eigene Klassen  und bauen Trouble Shooting ein.

Visual Studio Team Foundation Server 2017/2015 (TFS) für Administratoren - Kompakt

Nach dieser Schulung beherrschen Sie die Grundlagen des TFS. Sie erledigen administrative Aufgaben schnell und sicher.

/// <summary>
/// Writes the zip file.
/// </summary>
/// <param name="filesToZip">The files to zip.</param>
/// <param name="path">The destination path.</param>
/// <param name="compression">The compression level.</param>
private static void WriteZipFile(List<string> filesToZip, string path, int compression)
{
    if (compression < 0 || compression > 9)
        throw new ArgumentException("Invalid compression rate.");

    if (!Directory.Exists(new FileInfo(path).Directory.ToString()))
        throw new ArgumentException("The Path does not exist.");

    foreach (string c in filesToZip)
        if (!File.Exists(c))
            throw new ArgumentException(string.Format("The File{0}does not exist!", c));


    Crc32 crc32 = new Crc32();
    ZipOutputStream stream = new ZipOutputStream(File.Create(path));
    stream.SetLevel(compression);

    for (int i = 0; i < filesToZip.Count; i++)
    {
        ZipEntry entry = new ZipEntry(Path.GetFileName(filesToZip[i]));
        entry.DateTime = DateTime.Now;

        using (FileStream fs = File.OpenRead(filesToZip[i]))
        {
            byte[] buffer = new byte[fs.Length];
            fs.Read(buffer, 0, buffer.Length);
            entry.Size = fs.Length;
            fs.Close();
            crc32.Reset();
            crc32.Update(buffer);
            entry.Crc = crc32.Value;
            stream.PutNextEntry(entry);
            stream.Write(buffer, 0, buffer.Length);
        }
    }
    stream.Finish();
    stream.Close();
}

3 Kommentare zum Snippet

Christoph1972 schrieb am 08.11.2009:
Leider können die Archive nicht mit Win-Zip entpackt werden. Angeblich sind die Archive fehlerhaft. Mit dem Total-Commander funktioniert es jedoch. Kennt jemand ein workaround?
Christoph1972 schrieb am 08.11.2009:
Workaround = "einfach den Code richtig abtippen"

Hatte stream.Finsh() vergessen..... SORRY!
spezi schrieb am 24.10.2010:
Nur mal so als Hinweis und Anregung. Den ZipOutputStream sollte man auch in ein using packen ;)
 

Logge dich ein, um hier zu kommentieren!