Dateien mit C# und GZip packen und entpacken

Wer öfters mit Dateien arbeitet wird immer wieder mit komprimierten Dateien konfrontiert. Mal bekommt man sie und manchmal muss man solche Dateien selbst erstellen.
Die Gründe sind meist ersparnisse bei der Übertragung oder ganz einfach um Speicherplatz zu sparen.
Aber wie liest, oder schreibt man nun solche Dateien?

C# bzw. .Net stellt auch hier gute und effiziente Werkzeuge bereit.
Um den Zugriff auf diese Funktionalitäten ein wenig zu vereinfachen, habe ich eine kleine Helferklasse geschrieben, deren funktionsweise recht einfach gehalten ist.

public static class GZip
{
    public static void DecompressFile(string compressedFilePath, string uncompressedFilePath)
    {
        using (var inputStream = new System.IO.FileStream(compressedFilePath, System.IO.FileMode.Open, System.IO.FileAccess.Read))
        {
            using (var zipStream = new System.IO.Compression.GZipStream(inputStream, System.IO.Compression.CompressionMode.Decompress))
            {
                using (var outputStream = new System.IO.FileStream(uncompressedFilePath, System.IO.FileMode.Create, System.IO.FileAccess.Write))
                {
                    byte[] tempBytes = new byte[4096];
                    int i;
                    while ((i = zipStream.Read(tempBytes, 0, tempBytes.Length)) != 0)
                    {
                        outputStream.Write(tempBytes, 0, i);
                    }
                }
            }
        }
    }
 
 
    public static void CompressFile(string uncompressedFilePath, string compressedFilePath)
    {
        using (var inputStream = new System.IO.FileStream(compressedFilePath, System.IO.FileMode.Create, System.IO.FileAccess.Write))
        {
            using (var zipStream = new System.IO.Compression.GZipStream(inputStream, System.IO.Compression.CompressionMode.Compress))
            {
                byte[] inputBuffer = System.IO.File.ReadAllBytes(uncompressedFilePath);
                zipStream.Write(inputBuffer, 0, inputBuffer.Length);
            }
        }
    }
}

Diese beiden Funktionen bieten alles was man braucht um Dateien mit GZip zu komprimieren oder diese auch wieder zu entpacken.

Mit GZip.CompressFile(@"C:\test.docx", @"C:\test.docx.gz"); wird das Word Dokument C:\test.docx in die Datei C:\test.docx.gz gepackt und mit
GZip.DecompressFile(@"C:\test.docx.gz", @"C:\test.docx"); wieder entpackt.

Das Exception Handling muss man aber selbst übernehmen, da FileStream und GZipStream doch einige Ausnahmen werfen können.

For so long,
CJ


In this article



Most Recent

Hintergrundbeleuchtung für Laptops, die als Server laufen, ausschalten
Continue reading...

More posts

Die Anzahl eines Zeichens in einem String ermitteln
Die Anzahl eines Zeichens in einem String ermitteln

Heute wurde ich mal wieder mit einem kleinen Problemchen konfrontiert. Und zwar musst ich die Anzahl eines bestimmten Zeichens innerhalb eines...

SQL-Server: If Exists Update Else Insert
SQL-Server: If Exists Update Else Insert

Eine eine ziemlich häufige und immer wiederkehrende Situation, bei der Entwicklung mit Datenbanken ist es, das man Daten aktualisieren, bzw wenn...

Den Hostnamen zur einer IP mit C# ermittlen
Den Hostnamen zur einer IP mit C# ermittlen

Kommt ja schon mal häufiger vor das man wissen möchte wir der Hostname zu einer IP ist. Mir ging es vor kurzem so, das ich Logfiles auswerten...

Amazon EC2 Linux SSH über PuTTY Private Key unter Windows
Amazon EC2 Linux SSH über PuTTY Private Key unter Windows

Als ich heute meine erste Amazon EC2 Instanz erstellt habe, hab ich "nur" einen SSH Key bekommen. Nun möchte ich kurz erklären, wie man mit Hilfe...