Ich bin mir ziemlich sicher, dass dies kein Duplikat ist. Nehmen Sie sich also eine Minute Zeit für mich.
Wie kann ich eine Datei (unter Windows) programmgesteuert (C #) komprimieren, ohne Bibliotheken von Drittanbietern zu verwenden? Ich brauche einen nativen Windows-Aufruf oder ähnliches. Ich mag die Idee, einen Prozess zu starten, wirklich nicht, aber ich werde es tun, wenn ich es unbedingt muss. Ein PInovke-Anruf wäre viel besser.
Andernfalls möchte ich Ihnen sagen, was ich wirklich erreichen möchte: Ich muss die Möglichkeit haben, dass ein Benutzer eine Sammlung von Dokumenten in einer einzigen Anfrage herunterladen kann. Irgendwelche Ideen, wie dies erreicht werden kann?
c#
compression
zip
download
Esteban Araya
quelle
quelle
Antworten:
Verwenden Sie .NET 3.5? Sie können die
ZipPackage
Klasse und verwandte Klassen verwenden. Es ist mehr als nur das Komprimieren einer Dateiliste, da für jede hinzugefügte Datei ein MIME-Typ gewünscht wird. Es könnte tun, was Sie wollen.Ich verwende diese Klassen derzeit für ein ähnliches Problem, um mehrere verwandte Dateien in einer einzigen Datei zum Download zu archivieren. Wir verwenden eine Dateierweiterung, um die Download-Datei mit unserer Desktop-App zu verknüpfen. Ein kleines Problem, auf das wir gestoßen sind, war, dass es nicht möglich ist, nur ein Drittanbieter-Tool wie 7-zip zum Erstellen der Zip-Dateien zu verwenden, da der clientseitige Code sie nicht öffnen kann. ZipPackage fügt eine versteckte Datei hinzu, die den Inhaltstyp von beschreibt jede Komponentendatei und kann keine Zip-Datei öffnen, wenn diese Inhaltstypdatei fehlt.
quelle
Wenn Sie das 4.5+ Framework verwenden, gibt es jetzt die Klassen ZipArchive und ZipFile .
Sie müssen Verweise hinzufügen auf:
Für .NET Core Targeting Net46 müssen Sie Abhängigkeiten für hinzufügen
Beispiel project.json:
Für .NET Core 2.0 ist lediglich das Hinzufügen einer einfachen using-Anweisung erforderlich:
quelle
Ich war in der gleichen Situation und wollte .NET anstelle einer Bibliothek eines Drittanbieters. Wie bereits erwähnt, reicht es nicht aus, nur die ZipPackage-Klasse (eingeführt in .NET 3.5) zu verwenden. Es gibt eine zusätzliche Datei, die im Archiv enthalten sein muss, damit das ZipPackage funktioniert. Wenn diese Datei hinzugefügt wird, kann das resultierende ZIP-Paket direkt aus dem Windows Explorer geöffnet werden - kein Problem.
Sie müssen lediglich die XML-Datei [Content_Types] im Stammverzeichnis des Archivs mit einem "Standard" -Knoten für jede Dateierweiterung hinzufügen, die Sie einschließen möchten. Nach dem Hinzufügen konnte ich das Paket im Windows Explorer durchsuchen oder programmgesteuert dekomprimieren und dessen Inhalt lesen.
Weitere Informationen zur XML-Datei [Content_Types] finden Sie hier: http://msdn.microsoft.com/en-us/magazine/cc163372.aspx
Hier ist ein Beispiel für die XML-Datei [Content_Types] (muss genau benannt werden):
Und das C # zum Erstellen einer ZIP-Datei:
Hinweis:
quelle
quelle
Basierend auf Simon McKenzies Antwort auf diese Frage würde ich vorschlagen, zwei Methoden wie diese zu verwenden:
quelle
Sieht aus wie Windows könnte nur können Sie tun dies ...
Leider glaube ich nicht, dass Sie einen separaten Prozess starten können, wenn Sie nicht zu einer Komponente eines Drittanbieters wechseln.
quelle
Fügen Sie Ihrem Projekt diese 4 Funktionen hinzu:
Und benutze sie so:
quelle