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.


  1. public static class GZip
  2. {
  3. public static void DecompressFile(string compressedFilePath, string uncompressedFilePath)
  4. {
  5. using (var inputStream = new System.IO.FileStream(compressedFilePath, System.IO.FileMode.Open, System.IO.FileAccess.Read))
  6. {
  7. using (var zipStream = new System.IO.Compression.GZipStream(inputStream, System.IO.Compression.CompressionMode.Decompress))
  8. {
  9. using (var outputStream = new System.IO.FileStream(uncompressedFilePath, System.IO.FileMode.Create, System.IO.FileAccess.Write))
  10. {
  11. byte[] tempBytes = new byte[4096];
  12. int i;
  13. while ((i = zipStream.Read(tempBytes, 0, tempBytes.Length)) != 0)
  14. {
  15. outputStream.Write(tempBytes, 0, i);
  16. }
  17. }
  18. }
  19. }
  20. }
  21.  
  22.  
  23. public static void CompressFile(string uncompressedFilePath, string compressedFilePath)
  24. {
  25. using (var inputStream = new System.IO.FileStream(compressedFilePath, System.IO.FileMode.Create, System.IO.FileAccess.Write))
  26. {
  27. using (var zipStream = new System.IO.Compression.GZipStream(inputStream, System.IO.Compression.CompressionMode.Compress))
  28. {
  29. byte[] inputBuffer = System.IO.File.ReadAllBytes(uncompressedFilePath);
  30. zipStream.Write(inputBuffer, 0, inputBuffer.Length);
  31. }
  32. }
  33. }
  34. }

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

Tags: 
Kategorie: 

Neuen Kommentar schreiben