Extraire des fichiers XHTML depuis un ZIP dans .NET
Utilisez Aspose.ZIP for .NET pour ouvrir une archive ZIP, parcourir ses entrées et restaurer uniquement les fichiers XHTML nécessaires à votre application C#. Dans ce contexte, extraire signifie sélectionner les éléments XHTML stockés dans le conteneur puis les écrire dans une destination contrôlée; la bibliothèque d’archivage n’interprète pas et ne convertit pas leur contenu interne.
L’extraction sélective convient aux migrations de contenu, aux builds documentaires, aux templates et aux ressources applicatives. 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 XHTML 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
Après l'installation, ouvrez le ZIP avec Archive, parcourez Archive.Entries, sélectionnez les entrées non répertoire correspondant à .xhtml, puis appelez ArchiveEntry.Extract pour chaque destination autorisée. Ne laissez jamais un chemin stocké dans l'archive choisir librement l'emplacement de sortie.
Étapes pour extraire des fichiers XHTML 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.
- Ignorez les répertoires et retenez les entrées correspondant à .xhtml.
- 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 XHTML 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 XHTML depuis un ZIP - C#
using Aspose.Zip;
using System;
using System.IO;
string archivePath = Path.GetFullPath("package.zip");
string outputDirectory = Path.GetFullPath("extracted-xhtml");
string[] allowedExtensions = { ".xhtml", ".xht" };
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(
$"Entry '{fileName}' exceeds the 100 MB extraction limit.");
}
string destinationPath = Path.Combine(outputDirectory, fileName);
entry.Extract(destinationPath);
}
}
Notes de production pour les fichiers XHTML
Le balisage, les scripts et les références externes restent actifs après extraction. Analysez ou rendez le contenu dans un environnement isolé et appliquez les règles d’assainissement de l’application.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 parseur ou moteur de rendu isolé. 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 XHTML
Comment extraire uniquement les fichiers XHTML d’une archive ZIP en C# ?
Ouvrez le ZIP avec Archive, parcourez Archive.Entries, filtrez les entrées non répertoire selon .xhtml et appelez Extract pour chaque chemin de sortie validé.
Aspose.ZIP analyse-t-il le contenu du fichier XHTML ?
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 XHTML 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 : contenus web et fichiers de balisage
Consultez d'autres pages C# consacrées à l'extraction de formats proches stockés dans des archives.