Tipp der Woche 28.07.2022, 13:40 Uhr

.NET/VB: Textdateien komprimiert speichern

.NET bietet mehrere Möglichkeiten, Dateien zu komprimieren und zu speichern. Besonders einfach sind damit Backups ganzer Verzeichnisse. Aber auch einzelne Dateien kann man komprimiert sichern.
(Quelle: B. Lauer)
Im Namensraum System.IO.Compression bietet .NET einfache Möglichkeiten, sämtliche Dateien eines Ordners komprimiert in eine ZIP-Datei zu schreiben. Das taugt super für Backup-Zwecke und sieht so aus:
Imports System
Imports System.IO
Imports System.IO.Compression
...
ZipFile.CreateFromDirectory(
  Ordner, ZipDateiMitPfad, CompressionLevel.Fastest, True)
...
Als Alternative für den CompressionLevel stehen neben .Fastest noch die Varianten .SmallestSize, .NoCompression und .Optimal zur Auswahl. Das abschließende True legt fest, dass der Name des Basis-Ordners mit einbezogen werden soll.
Soll nur eine einzelne Datei komprimiert gesichert werden, bietet Microsofts Dokumentation eine C#-Lösung an, die hier nach Visual-Basic übersetzt und in die Methoden blSaveAsGZipFile und blReadGZipFile gepackt wurde (die typischen automatischen Code-Wandler machen dabei einen kleinen aber entscheidenden Fehler). Im Beispiel fehlt noch eine Absicherung gegen Ausnahmen, die beispielsweise auftreten, wenn einer der Pfade nicht existieren sollte.
Imports System
Imports System.IO
Imports System.IO.Compression
...

Public Sub blSaveAsGZipFile(ByVal content As String,
  ByVal GZipPath As String, ByVal unCompressedPath As String)

  File.WriteAllText(unCompressedPath, content)

  Using originalFileStream As FileStream =
    File.Open(unCompressedPath, FileMode.Open)
    Using compressedFileStream As FileStream = File.Create(GZipPath)
      Using compressor = New GZipStream(compressedFileStream,
        CompressionMode.Compress)
        originalFileStream.CopyTo(compressor)
      End Using
    End Using
  End Using
  File.Delete(unCompressedPath)
End Sub


Public Function blReadGZipFile(ByVal GZipPath As String,
  ByVal unCompressedPath As String) As String

  Dim erg As String = ""
  Using compressedFileStream As FileStream =
    File.Open(GZipPath, FileMode.Open)
    Using outputFileStream As FileStream = File.Create(unCompressedPath)
      Using decompressor = New GZipStream(compressedFileStream,
        CompressionMode.Decompress)
        decompressor.CopyTo(outputFileStream)
      End Using
    End Using
  End Using

  erg = File.ReadAllText(unCompressedPath)
  Return erg
End Function


Das könnte Sie auch interessieren