Wie zu dekomprimieren verschachtelt GZIP (TGZ) Dateien in C #
-
20-09-2019 - |
Frage
Ich erhalte eine TGZ-Datei, die eine einfache Textdatei zusammen mit möglicherweise einer oder mehr verschachtelten TGZ-Dateien enthalten. Ich habe herausgefunden, wie die Haupt TGZ-Datei entpacken und die Klartextdatei enthielt darin lesen, aber ich habe nicht herausfinden konnte, wie zu erkennen und zu dekomprimieren die verschachtelten TGZ-Dateien. Hat über dieses Problem jemand kommen vor?
Auch ich habe keine Kontrolle über die Datei erhalte ich, so dass ich nicht das Format einer Datei TGZ TGZ-Dateien mit verschachtelten ändern kann. Ein weiterer Nachteil (obwohl ich glaube nicht, es darauf ankommt) ist, dass diese Dateien komprimiert werden und in einer Unix oder Linux-Umgebung geteert.
Vielen Dank im Voraus für jede Hilfe.
Lösung
Versuchen Sie, die SharpZipLib ( http://www.icsharpcode.net/OpenSource/SharpZipLib/ Download.aspx ) freie Bibliothek.
Damit können Sie die Arbeit mit TGZ und verfügt über Methoden zu Testdateien, bevor Sie versuchen, sie aufzublasen; so dass Sie entweder auf den Dateierweiterungen verlassen können sie einzeln zu korrigieren oder Test sein, um zu sehen, wenn man sich als komprimierte Dateien lesen kann -. sie dann aufblasen, wenn die Haupt-Datei dekomprimiert wurde
Andere Tipps
Lesen und Schreiben TAR und TGZ (oder tar.gz-Dateien) von .NET können Sie diese ein-Datei tar-Klasse verwenden:
http://cheesoexamples.codeplex.com/SourceControl/changeset/view / 97756 # 1868643
Sehr einfache Bedienung. Um ein Archiv zu erstellen:
string[] filenames = { ... };
Ionic.Tar.CreateArchive("archive.tar", filenames);
Erstellen Sie ein komprimiertes (gzip) tar-Archiv:
string[] filenames = { ... };
Ionic.Tar.CreateArchive("archive.tgz", filenames, TarOptions.Compress);
ein tar-Archiv lesen:
var entries = Ionic.Tar.List("archive.tar"); // also handles .tgz files
Extrahieren Sie alle Einträge in einem tar-Archiv:
var entries = Ionic.Tar.Extract("archive.tar"); // also handles .tgz files
Hier finden Sie aktuelle DotNetZip auf CodePlex.
"Wenn alles, was Sie wollen, ist ein besseres DeflateStream oder GZipStream Klasse Ersetzen der, der die in-gebaut .NET BCL, dass auch hier ist. DotNetZip des DeflateStream und GZipStream ist in einem verfügbar Einzelaufstellung, basierend auf einer .NET Hafen von Zlib. Diese Ströme unterstützen Komprimierungsstufen und liefern viel eine bessere Leistung, dass die eingebaute in Klassen. Es gibt auch eine ZlibStream zu vervollständigen das Set (RFC 1950, 1951, 1952). "
Es scheint, dass Sie durch die komprimierte Datei und ziehen Sie die einzelnen Dateien aus dem Archiv laufen können. Anschließend können Sie die Dateien testen Sie unkomprimiert und sehen, ob einer von ihnen selbst gzip-Dateien.
Hier ist ein snippit von ihren Beispielen Seite
using (ZipFile zip = ZipFile.Read(ExistingZipFile))
{
foreach (ZipEntry e in zip)
{
e.Extract(OutputStream);
}
}
Keith