Ich habe ein DataSet bestehend aus XML-Daten, ich kann dies einfach in eine Datei ausgeben:
%Vor%Allerdings möchte ich die XML-Datei in eine ZIP-Datei oder eine andere Art komprimierter Datei komprimieren und dann diese Datei auf der Festplatte speichern, während die ZIP-Datei in 1MB-Chunks aufgeteilt wird. Ich möchte die unkomprimierte Datei nicht wirklich speichern und dann zippen und dann teilen.
Was ich speziell suche ist
Ich habe es geschafft, den XML-Datenstrom eines DataSets mit der gzip-Komprimierung von .NET 2.0 zu komprimieren.
Hier ist der Blogpost, den ich vor ein paar Jahren darüber gemacht habe:
Daten lokal mit Komprimierung speichern
... und hier ist der Code, den ich der partiellen Klasse meines DataSet hinzugefügt habe, um die komprimierte Datei zu schreiben (der Blogpost hat auch den Lesecode):
%Vor%Beachten Sie, dass dieser Code verschiedene Komprimierungsschemas basierend auf der Dateierweiterung verwendet. Das war rein, damit ich mit meinem DataSet einen Plan gegen den anderen testen konnte.
Es gibt eine nicht so bekannte Packaging-API, die im 3.5-Framework enthalten ist. Die Assembly-Referenz ist in der GAC, WindowsBase genannt. Der System.IO.Packaging-Namespace enthält Zeug zum Erstellen von OPC-Dateien (z. B. OOXML), bei denen es sich um ZIP-Dateien mit XML und allem, was sonst noch gewünscht ist, handelt. Sie erhalten einige Extras, die Sie nicht benötigen, aber die ZipPackage-Klasse verwendet eine Streaming-Schnittstelle, um Inhalte iterativ hinzuzufügen.
Dies funktioniert mit Streams oder Dateien, hat eine gute Lizenz und Quelle: Ссылка
Hier ist der Code, der genau das tut, was das ursprüngliche Poster verlangte: Schreiben Sie ein DataSet in eine Zip-Datei, die in 1mb Chunks unterteilt ist:
%Vor%Das Framework enthält einige Klassen zum Komprimieren von Streams. Einer von ihnen ist GZipStream. Wenn Sie danach suchen, werden Sie viele Treffer finden. Hier ist ein von ihnen. Ich stelle mir vor, die Ausgabe würde einige zusätzliche Arbeit beinhalten.
Sie sollten Xceed Zip verwenden. Der Code würde so aussehen (nicht getestet):
%Vor%Tags und Links c# zip compression