Extraire des fichiers SHP depuis un ZIP dans .NET
Utilisez Aspose.ZIP for .NET pour restaurer depuis un ZIP les composants d’un Shapefile. Le fichier .shp contient la géométrie, mais un dataset exploitable nécessite généralement les fichiers .shx et .dbf portant le même nom de base, ainsi que .prj et .cpg lorsqu’ils sont fournis.
L’extraction sélective convient aux imports SIG, aux services cartographiques, à l’ETL spatial et aux échanges de jeux de données. L’application peut ignorer les fichiers sans rapport, contrôler les noms et les tailles, puis transmettre les éléments autorisés au composant métier suivant sans décompresser tout le package.
Comment extraire des fichiers SHP d'une archive ZIP avec C#
Installez le package Aspose.ZIP for .NET et référencez le namespace Aspose.Zip. Les métadonnées sont accessibles avant l’extraction : l’application peut donc contrôler ArchiveEntry.Name, ArchiveEntry.IsDirectory et ArchiveEntry.UncompressedSize avant d’écrire un fichier.
Package Manager Console Command
PM> Install-Package Aspose.Zip
Ouvrez le ZIP avec Archive, parcourez Archive.Entries et sélectionnez les membres .shp, .shx, .dbf, .prj et .cpg appartenant au même dataset. Écrivez chaque composant dans une destination validée sans laisser le chemin archivé sortir du dossier cible.
Étapes pour extraire des fichiers SHP en C#
- Définissez le chemin du ZIP source et créez un répertoire de sortie isolé.
- Ouvrez l’archive avec la classe Archive.
- Parcourez Archive.Entries au lieu d’extraire immédiatement tout le package.
- Sélectionnez le fichier de géométrie SHP et les fichiers compagnons portant le même nom de base.
- Construisez un chemin de destination qui reste sous la racine autorisée.
- Refusez les entrées dépassant la limite de taille décompressée.
- Enregistrez chaque entrée approuvée avec ArchiveEntry.Extract.
Prérequis système
Avant d’exécuter l’exemple, vérifiez que l’environnement comprend:
- Une version de .NET prise en charge sous Windows, Linux ou macOS.
- Visual Studio, JetBrains Rider, Visual Studio Code ou un autre environnement C#.
- Aspose.ZIP for .NET installé via NuGet ou référencé comme assembly.
- Un accès en lecture au ZIP source et un accès en écriture au répertoire cible.
- Des limites définies pour la taille, la durée et le stockage temporaire.
Exemple C# : extraire des fichiers SHP sélectionnés depuis un ZIP
Le code ouvre un package ZIP, ignore les répertoires, filtre les entrées correspondant au format et écrit les fichiers retenus dans une destination contrôlée. En production, ajoutez une règle déterministe pour les doublons et plafonnez également la taille totale décompressée.
Extraire des fichiers SHP depuis un ZIP - C#
using Aspose.Zip;
using System;
using System.IO;
string archivePath = Path.GetFullPath("geodata.zip");
string outputDirectory = Path.GetFullPath("extracted-shapefile");
string[] requiredExtensions = { ".shp", ".shx", ".dbf", ".prj", ".cpg" };
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(
requiredExtensions,
value => string.Equals(value, extension, StringComparison.OrdinalIgnoreCase)))
{
continue;
}
if (entry.UncompressedSize > MaxEntrySize)
{
throw new InvalidDataException(
$"Entry '{fileName}' exceeds the 100 MB extraction limit.");
}
string destinationPath = Path.Combine(outputDirectory, fileName);
entry.Extract(destinationPath);
}
}
Notes de production pour les fichiers SHP
Un Shapefile est un jeu de données multifichier. Conservez ensemble les fichiers .shp, .shx et .dbf portant le même nom de base, ainsi que .prj et .cpg lorsqu’ils existent.Le filtrage par extension identifie un fichier candidat, mais ne valide ni sa structure interne ni son intégrité. Avant de l’importer, l’afficher ou le convertir, contrôlez-le avec un composant SIG. Définissez aussi une règle explicite pour les noms en double et limitez la taille totale après extraction.
Sécurité et confidentialité
Traitez le ZIP importé, les noms d’entrées et leur contenu comme des données non fiables. N’ajoutez pas directement ArchiveEntry.Name au répertoire de sortie : une entrée peut contenir un chemin absolu ou des segments remontant vers un dossier parent. Si vous conservez l’arborescence, résolvez le chemin final et vérifiez qu’il reste sous la racine autorisée.
Limitez la taille compressée, la taille après extraction, le nombre d’entrées, la durée d’exécution et la concurrence. Utilisez un stockage temporaire aux droits restreints, nettoyez les résultats après une erreur et n’inscrivez dans les logs ni mots de passe, ni noms privés, ni contenu extrait.
FAQ sur l'extraction de fichiers SHP
Comment extraire uniquement les fichiers SHP d’une archive ZIP en C# ?
Ouvrez le ZIP avec Archive, parcourez Archive.Entries, filtrez les entrées non répertoire selon .shp, .shx, .dbf, .prj et .cpg et appelez Extract pour chaque chemin de sortie validé.
Aspose.ZIP analyse-t-il le contenu du fichier SHP ?
Non. Aspose.ZIP restaure le fichier stocké dans l'archive. La lecture, la validation ou la conversion de son contenu relève du composant spécialisé pour ce format.
Le même principe fonctionne-t-il avec des archives 7Z, RAR ou TAR ?
Oui, mais chaque conteneur doit être ouvert avec la classe Aspose.ZIP correspondante. Les types d'entrées et les opérations disponibles peuvent varier selon le format.
Comment gérer plusieurs fichiers SHP portant le même nom ?
Définissez la règle avant l'extraction : refuser le doublon, générer un nom unique ou conserver une arborescence relative après validation de chaque chemin.
Guides d'extraction associés : données géospatiales
Consultez d'autres pages C# consacrées à l'extraction de formats proches stockés dans des archives.