KML-Dateien aus ZIP in .NET extrahieren
Verwenden Sie Aspose.ZIP for .NET, um ein ZIP-Archiv zu prüfen und nur die KML-Dateien wiederherzustellen, die Ihre C#-Anwendung benötigt. Auf dieser Seite bedeutet Extraktion, passende Dateien aus einem ZIP-Container auszuwählen und in ein kontrolliertes Zielverzeichnis zu schreiben. Aspose.ZIP interpretiert oder konvertiert den internen Inhalt der Datei dabei nicht.
Selektive Extraktion eignet sich für Geodatenimporte, Kartenverarbeitung, ETL-Jobs, Integrationspakete und Austausch zwischen GIS-Systemen. Die Anwendung kann nicht relevante Einträge überspringen, Ausgabe- und Ressourcenregeln durchsetzen und freigegebene Dateien an den nächsten Dienst übergeben, ohne das vollständige Archiv zu entpacken.
KML-Dateien aus ZIP mit C# extrahieren
Installieren Sie das
Aspose.ZIP-Paket for .NET
und importieren Sie den Namespace Aspose.Zip. Archivmetadaten stehen bereits vor dem Schreiben zur Verfügung. So kann die Anwendung ArchiveEntry.Name, ArchiveEntry.IsDirectory und ArchiveEntry.UncompressedSize als Teil ihrer Annahmeregeln auswerten.
Package Manager Console Command
PM> Install-Package Aspose.Zip
Öffnen Sie die ZIP-Datei mit Archive, durchlaufen Sie Archive.Entries, wählen Sie Einträge mit der Erweiterung .kml aus und rufen Sie ArchiveEntry.Extract für jedes freigegebene Ziel auf. Das Beispiel reduziert archivierte Pfade auf den endgültigen Dateinamen, damit Einträge das Zielverzeichnis nicht verlassen können.
Schritte zum Wiederherstellen von KML-Dateien in C#
- Den Quellpfad der ZIP-Datei auflösen und ein isoliertes Ausgabeverzeichnis erstellen.
- Das Paket mit der Klasse
Archiveöffnen. Archive.Entriesdurchlaufen, statt jeden Eintrag zu entpacken.- Einträge auswählen, deren endgültiger Dateiname die Erweiterung .kml verwendet.
- Einen Zielpfad erstellen, der unterhalb des freigegebenen Ausgabestamms bleibt.
- Einträge ablehnen, die das konfigurierte Limit für die entpackte Größe überschreiten.
- Jeden akzeptierten Eintrag mit
ArchiveEntry.Extractspeichern.
Systemanforderungen
Stellen Sie vor dem Ausführen des Beispiels sicher, dass die Umgebung Folgendes enthält:
- Eine unterstützte .NET-Laufzeit unter Windows, Linux oder macOS.
- Visual Studio, JetBrains Rider, Visual Studio Code oder eine andere C#-Entwicklungsumgebung.
- Aspose.ZIP for .NET, installiert über NuGet oder als Assembly referenziert.
- Lesezugriff auf das Quellarchiv und Schreibzugriff auf das Zielverzeichnis.
- Speicher- und Ausführungslimits, die zu nicht vertrauenswürdigen komprimierten Eingaben passen.
C#-Beispiel: KML-Dateien in einem ZIP-Archiv auswählen
Der Code öffnet ein ZIP-Paket, filtert Nicht-Verzeichniseinträge nach der freigegebenen Erweiterung und schreibt passende Dateien in ein Ausgabeverzeichnis. Das Reduzieren archivierter Pfade hält das Beispiel kompakt und verhindert, dass übergeordnete Pfadsegmente das Ziel bestimmen. Produktionscode sollte außerdem eine deterministische Regel für doppelte Ausgabenamen festlegen.
KML-Dateien aus ZIP extrahieren - C#
using Aspose.Zip;
using System;
using System.IO;
string archivePath = Path.GetFullPath("package.zip");
string outputDirectory = Path.GetFullPath("extracted-kml");
string[] allowedExtensions = { ".kml" };
const ulong MaxEntrySize = 100UL * 1024 * 1024;
Directory.CreateDirectory(outputDirectory);
using (var archive = new Archive(archivePath))
{
foreach (ArchiveEntry entry in archive.Entries)
{
if (entry.IsDirectory) continue;
string fileName = Path.GetFileName(entry.Name);
if (string.IsNullOrWhiteSpace(fileName)) continue;
string extension = Path.GetExtension(fileName);
if (!Array.Exists(
allowedExtensions,
value => string.Equals(value, extension, StringComparison.OrdinalIgnoreCase)))
{
continue;
}
if (entry.UncompressedSize > MaxEntrySize)
{
throw new InvalidDataException(
$"Eintrag '{fileName}' überschreitet das Extraktionslimit von 100 MB.");
}
string destinationPath = Path.Combine(outputDirectory, fileName);
entry.Extract(destinationPath);
}
}
Implementierungshinweise für KML-Pakete
Eine passende Erweiterung bestätigt nicht, dass Koordinatensysteme, Geometrien, Attribute oder Begleitdateien vollständig und korrekt sind. Validieren Sie die wiederhergestellten Geodaten mit der GIS-Komponente des nächsten Verarbeitungsschritts.Das Beispiel reduziert archivierte Pfade auf einfache Dateinamen. Wenn zwei akzeptierte Einträge denselben Endnamen haben, kann ArchiveEntry.Extract eine vorhandene Ausgabedatei überschreiben. Legen Sie deshalb eine eindeutige Kollisionsregel fest: Duplikate ablehnen, eindeutige Namen erzeugen oder eine validierte relative Ordnerstruktur beibehalten. Verwenden Sie für jeden Job ein eigenes Zielverzeichnis, damit parallele Anfragen keine Ergebnisse vermischen.
Sicherheits- und Datenschutzaspekte
Behandeln Sie Archivnamen und Nutzdaten als nicht vertrauenswürdig. Hängen Sie ArchiveEntry.Name niemals direkt an den Zielpfad an, da absolute Pfade und übergeordnete Verzeichnisse außerhalb des vorgesehenen Ordners schreiben könnten. Das Standardbeispiel verwendet Path.GetFileName; Workflows, die Ordner beibehalten, müssen den vollständigen Pfad auflösen und prüfen, dass er unterhalb des freigegebenen Stamms bleibt.
Setzen Sie Limits für die komprimierte Eingabegröße, die entpackte Größe pro Eintrag und insgesamt, die Anzahl der Einträge, die Verarbeitungszeit und parallele Jobs. Extrahieren Sie in eingeschränkten temporären Speicher, bereinigen Sie Teilausgaben nach Fehlern, scannen Sie Dateien bei Bedarf und vermeiden Sie das Protokollieren privater Dateinamen oder Dateiinhalte.
KML-Extraktion FAQ
Wie extrahiere ich in C# nur KML-Dateien aus einem ZIP-Archiv?
Öffnen Sie die ZIP-Datei mit Archive, durchlaufen Sie Archive.Entries, filtern Sie passende Einträge nach der Erweiterung .kml und rufen Sie Extract für jeden akzeptierten Zielpfad auf.
Validiert Aspose.ZIP den Inhalt einer extrahierten KML-Datei?
Nein. Die Erweiterung ist nur ein erster Filter. Validieren Sie die wiederhergestellte Datei mit einer Komponente, die KML-Inhalte versteht.
Kann dasselbe Auswahlmuster mit 7Z-, RAR- oder TAR-Containern verwendet werden?
Ja, aber jeder Container muss mit der passenden Aspose.ZIP-Archivklasse geöffnet werden. Eintragstypen und verfügbare Extraktionsmethoden können je nach Archivformat unterschiedlich sein.
Wie sollten doppelte KML-Dateinamen behandelt werden?
Legen Sie die Regel vor der Extraktion fest: Duplikate ablehnen, eindeutige Namen erzeugen oder eine validierte relative Ordnerstruktur beibehalten.
Verwandte Anleitungen zur Extraktion von GIS-Dateien
Durchsuchen Sie C#-Anleitungen für Geodaten, Kartenressourcen und Austauschformate in Archiven.