Archivdateien in C# und .NET extrahieren

ZIP und andere Archivformate programmgesteuert in .NET-Anwendungen entpacken.

Archivdateien in .NET extrahieren

Aspose.ZIP for .NET ist eine verwaltete Bibliothek zum Öffnen von Archiven und Entpacken ihrer Inhalte in C#-Anwendungen. Über die APIs können Sie Archiveinträge lesen, alle oder ausgewählte Elemente extrahieren, Verzeichnisstrukturen beibehalten und die Ausgabe in einen Ordner oder Stream schreiben. Die Verarbeitung bleibt innerhalb der Anwendung, sodass serverseitige Workflows nicht von Desktopsoftware oder Kommandozeilentools abhängen.

Typische Einsatzfälle sind Dokumentaufnahme, Wiederherstellung von Backups, Deployment-Pakete, Upload-Verarbeitung und automatisierter Datenaustausch. Dieselbe API kann in ASP.NET-Diensten, Hintergrundprozessen, Desktopanwendungen, Cloud-Jobs und CI/CD-Tools laufen. Ihre Anwendung entscheidet, welche Formate und Einträge akzeptiert werden und wo die Ausgabe gespeichert wird.

Der Ablauf unterscheidet sich je nach Format. ZIP, 7Z, RAR, TAR und CAB verwenden unterschiedliche Containerstrukturen, Kompressionsmethoden und API-Klassen. Diese Übersicht erklärt den gemeinsamen Extraktionsprozess; formatspezifische Anleitungen liefern anschließend die passende Klasse, Optionen und Einschränkungen für jeden Archivtyp.

Was ist ein Archivdatei-Extraktor?

Ein Archivdatei-Extraktor öffnet einen Container, der eine oder mehrere Dateien enthält, und stellt die gespeicherten Inhalte wieder her. Dabei werden in der Regel Archivmetadaten gelesen, Einträge und Verzeichnisse identifiziert, Daten dekomprimiert und die Ergebnisse an einen freigegebenen Speicherort geschrieben. Verschlüsselte Archive benötigen zusätzlich gültige Zugangsdaten und vom jeweiligen Format unterstützte Einstellungen.

Die Begriffe extrahieren, entpacken und dekomprimieren werden oft ähnlich verwendet. Wenn Entwickler davon sprechen, Dateien zu unzippen, meinen sie das Extrahieren von Inhalten aus einem ZIP-Container. Archivextraktion ist der allgemeinere Vorgang und umfasst auch Formate wie 7Z, RAR, TAR, CAB, CPIO und XZ.

In Produktionssystemen ist Entpacken mehr als ein einzelner Methodenaufruf. Anwendungen müssen möglicherweise Eintragsnamen prüfen, einzelne Elemente auswählen, Ordner beibehalten, Streams akzeptieren, Passwörter verarbeiten, Fehler melden und Limits durchsetzen, bevor etwas dauerhaft gespeichert wird.

So funktioniert Archivextraktion

Ein typischer C#-Workflow besteht aus sieben Schritten:

  1. Ein Archiv aus einem lokalen Pfad, Upload, Stream oder Speicherdienst empfangen.
  2. Ermitteln, ob das Archivformat von der Anwendung unterstützt wird.
  3. Den Container mit der für dieses Format vorgesehenen API-Klasse öffnen.
  4. Archiveinträge prüfen, wenn Filterung oder selektive Extraktion erforderlich ist.
  5. Eintragspfade und Ressourcenlimits validieren, bevor Dateien geschrieben werden.
  6. Freigegebene Einträge in ein isoliertes Ziel extrahieren.
  7. Die Ausgabe an die nächste Anwendungsstufe übergeben und temporäre Daten entfernen.

Die Klasse zum Öffnen hängt vom Eingabetyp ab, weil ZIP, 7Z, RAR, TAR und CAB kein identisches internes Modell teilen. Ein Dienst kann trotzdem einen einheitlichen Anwendungsworkflow anbieten und jeden Container intern an die passende Aspose.ZIP-API weiterleiten.

Für die Extraktion verfügbare Archivformate

Die Bibliothek arbeitet mit gängigen Archiv- und Kompressionsformaten, darunter ZIP, 7Z, RAR, TAR, GZIP, BZIP2, XZ, LZIP, Z, CPIO, CAB und WIM. Die verfügbaren Operationen unterscheiden sich, weil manche Formate mehrere Einträge enthalten, während andere einen einzelnen komprimierten Stream oder einen TAR-Container in einer zusätzlichen Kompressionsschicht darstellen.

Wählen Sie den Handler passend zum tatsächlichen Container, statt sich nur auf die Dateierweiterung zu verlassen. Prüfen Sie für jedes Format, ob die benötigte Operation, Verschlüsselungsmethode und Stream-Verarbeitung unterstützt wird, bevor es in eine automatisierte Pipeline aufgenommen wird.

Häufige Workflows zur Dateiextraktion

Das vollständige Archiv entpacken. Verwenden Sie vollständige Extraktion, wenn jeder Eintrag benötigt wird und die Eingabe die Validierung bestanden hat. Behalten Sie bei Bedarf die ursprüngliche Ordnerhierarchie bei und weisen Sie jedem Job ein eindeutiges Ziel zu, damit parallele Anfragen ihre Ausgabe nicht überschreiben oder vermischen.

Nur ausgewählte Einträge lesen. Prüfen Sie Archive.Entries und wenden Sie Anwendungsregeln an, bevor Daten geschrieben werden. Das ist nützlich, wenn ein Paket viele Assets enthält, der Workflow aber nur ein Dokument, Manifest, eine Konfigurationsdatei oder einen bekannten Ordner benötigt. Außerdem werden unnötige Schreibvorgänge auf die Festplatte vermieden.

Einen Stream verarbeiten. Streambasierte Eingaben passen zu ASP.NET-Uploads, Objektspeichern, Datenbanken und nachrichtengetriebenen Systemen. Halten Sie Besitz und Lebensdauer von Streams explizit und vermeiden Sie, ein unbegrenztes Archiv vollständig im Arbeitsspeicher zu puffern.

Geschützte Inhalte öffnen. Übergeben Sie Zugangsdaten über die für das jeweilige Format verfügbaren Entschlüsselungseinstellungen. Passwörter sollten aus geschützter Konfiguration oder einem Secret Store kommen und niemals in Logs geschrieben werden. Geben Sie einen kontrollierten Anwendungsfehler zurück, wenn Zugangsdaten fehlen oder ungültig sind.

Große Eingaben als begrenzte Jobs behandeln. Begrenzen Sie komprimierte Größe, entpackte Größe, Anzahl der Einträge, Verarbeitungszeit und Nutzung temporären Speichers. Definieren Sie diese Limits in der Anwendung, statt Vertrauen aus der Erweiterung abzuleiten.

Aspose.ZIP zu einem C#-Projekt hinzufügen

Installieren Sie das Aspose.ZIP-NuGet-Paket in einem C#-Projekt, das auf eine unterstützte .NET-Umgebung unter Windows, Linux oder macOS abzielt. Referenzieren Sie anschließend den benötigten Namespace und wählen Sie die Klasse, die zum Eingabecontainer passt. Der Prozess benötigt außerdem Lesezugriff auf die Quelle, Schreibzugriff auf das Ziel und ausreichend temporären Speicher für das konfigurierte Entpacklimit.

Verwenden Sie den folgenden Befehl in der Package Manager Console:

Package Manager Console

PM> Install-Package Aspose.Zip

C#-Beispiel: Eine ZIP-Datei entpacken

ZIP bietet ein kompaktes Beispiel für den gemeinsamen Workflow. Der Code öffnet die Eingabe und schreibt ihre Inhalte in ein Zielverzeichnis. Bevor Sie dieses Muster mit externen Dateien verwenden, validieren Sie Container, Ausgabepfade und Ressourcenlimits.

ZIP-Inhalte in ein Verzeichnis extrahieren

using Aspose.Zip;
using System.IO;

string archivePath = Path.GetFullPath("input.zip");
string outputDirectory = Path.GetFullPath("extracted");

Directory.CreateDirectory(outputDirectory);

using (var archive = new Archive(archivePath))
{
    archive.ExtractToDirectory(outputDirectory);
}

Sichere Archivextraktion in Produktion

Behandeln Sie Archive von Benutzern oder externen Systemen als nicht vertrauenswürdige Eingaben. Eine erwartete Erweiterung beweist nicht, dass ein Container gültig oder sicher ist. Prüfen Sie, ob der ausgewählte Handler die Daten parsen kann, und lehnen Sie fehlerhafte oder nicht unterstützte Eingaben ab.

Lösen Sie vor dem Schreiben eines Eintrags dessen Ausgabepfad gegen das freigegebene Ziel auf. Lehnen Sie absolute Pfade, übergeordnete Verzeichnisse und jedes Ergebnis außerhalb dieses Verzeichnisses ab. So verhindern Sie, dass archivierte Dateinamen Schreibvorgänge an andere Stellen im Dateisystem umleiten.

Setzen Sie Limits für komprimierte Größe, gesamte entpackte Größe, Größe einzelner Einträge, Anzahl der Einträge, Verschachtelungstiefe, Ausführungszeit und Parallelität. Diese Kontrollen reduzieren das Risiko durch Dekompressionsbomben und erschöpften Speicher. Verwenden Sie einen jobspezifischen temporären Ordner mit eingeschränkten Berechtigungen, übernehmen Sie nur validierte Ausgaben und bereinigen Sie nach erfolgreichen wie fehlgeschlagenen Vorgängen.

Logs sollten Vorgangskennungen und Statusinformationen enthalten, nicht jedoch Passwörter, private Dateinamen oder extrahierte Dateiinhalte. Wenn die Ausgabe später geparst, angezeigt oder gescannt wird, behandeln Sie jede nachgelagerte Komponente als eigene Vertrauensgrenze.

Extraktion im Browser testen

Mit der kostenlosen browserbasierten Extraktions-App können Sie Beispieleingaben testen, ohne Software zu installieren. Das ist hilfreich, um erwartete Ausgaben zu prüfen, bevor Sie den Workflow in C# implementieren.

Das Online-Tool ist für interaktive Aufgaben gedacht. Die .NET-Bibliothek richtet sich an wiederholbare Dienste, Hintergrundverarbeitung, Speicherpipelines und Enterprise-Anwendungen, in denen Validierung und Ausgabebehandlung unter Anwendungskontrolle bleiben müssen.

Extraktionsanleitungen für einzelne Archivtypen

Implementierungsdetails variieren je nach Container. Eine formatspezifische Anleitung sollte Folgendes nennen:

  • die richtige Aspose.ZIP-Klasse zum Öffnen des Archivs;
  • Beispiele für vollständige und selektive Extraktion;
  • Verhalten bei Passwörtern und Verschlüsselung;
  • streambasierte Verarbeitung, soweit anwendbar;
  • formatspezifische Einschränkungen und Produktionshinweise;
  • die relevante API-Referenz und Dokumentation.

Verwenden Sie bei der Umsetzung die Anleitung für den tatsächlichen Eingabetyp. So vermeiden Sie, ZIP-Annahmen auf 7Z, RAR, TAR, CAB oder Stream-Kompressionsformate mit anderem Verhalten zu übertragen.

Anleitungen zur Archivextraktion nach Dateiformat

Durchsuchen Sie C#-Extraktionsseiten für Dateien und Assets, die häufig in ZIP-Archiven gespeichert werden.

Ressourcen zur Archivextraktion

FAQ zur Archivextraktion

1. Wie extrahiere ich Archivdateien in C#?

Installieren Sie Aspose.ZIP, öffnen Sie die Eingabe mit der Klasse, die zu ihrem Format passt, und entpacken Sie den vollständigen Container oder ausgewählte Einträge in ein freigegebenes Verzeichnis oder einen Stream.

2. Wie kann ich Dateien aus einem ZIP-Archiv extrahieren?

Erstellen Sie eine Archive-Instanz für die ZIP-Eingabe und rufen Sie ExtractToDirectory auf, um alles zu entpacken. Durchlaufen Sie Archive.Entries, wenn die Anwendung nur ausgewählte Elemente prüfen oder speichern soll.

3. Ist das Extrahieren eines Archivs dasselbe wie das Entzippen von Dateien?

Entzippen bezieht sich speziell auf ZIP-Dateien. Extraktion ist der allgemeinere Vorgang und umfasst auch Formate wie 7Z, RAR, TAR, CAB, CPIO und WIM.

4. Können .NET-Anwendungen passwortgeschützte Archive öffnen?

Aspose.ZIP unterstützt passwortbasierten Zugriff für passende Formate, wenn gültige Zugangsdaten und übereinstimmende Entschlüsselungseinstellungen angegeben werden. Das genaue Verhalten hängt vom Containertyp ab.

5. Wie sollten hochgeladene Archive sicher extrahiert werden?

Verwenden Sie isolierten temporären Speicher, validieren Sie jeden Ausgabepfad, beschränken Sie akzeptierte Formate, erzwingen Sie Limits für komprimierte und entpackte Größe, setzen Sie ein Verarbeitungstimeout und entfernen Sie temporäre Daten nach dem Vorgang.