Extraire des fichiers d’archive en C# et .NET
Décompressez des archives ZIP et d’autres formats par programmation dans vos applications .NET.
Extraction de fichiers d'archive dans .NET
Aspose.ZIP for .NET est une bibliothèque managée qui permet d’ouvrir des archives et d’en extraire le contenu dans une application C#. Ses API servent à parcourir les entrées, à extraire l’ensemble de l’archive ou uniquement certains éléments, à conserver l’arborescence et à écrire les données dans un dossier ou un stream. Tout le traitement reste dans l’application : les workflows côté serveur ne dépendent donc ni d’un logiciel desktop ni d’un utilitaire en ligne de commande.
Les cas d’usage courants comprennent l’ingestion de documents, la restauration de sauvegardes, le traitement des uploads, le déploiement d’applications et les échanges de données automatisés. La même API peut être intégrée à un service ASP.NET, un background worker, une application desktop, une tâche cloud ou une chaîne CI/CD. L’application garde la maîtrise des formats et des entrées acceptés ainsi que de l’emplacement où les fichiers sont écrits.
Le workflow dépend du format. ZIP, 7Z, RAR, TAR et CAB reposent sur des structures de conteneur, des méthodes de compression et des classes API différentes. Cette page présente le processus commun; les guides dédiés à chaque format précisent ensuite la classe, les options et les restrictions à utiliser.
Qu'est-ce qu'un extracteur de fichiers d'archive ?
Un extracteur ouvre un conteneur qui regroupe un ou plusieurs fichiers et restaure les données qu’il contient. L’opération consiste généralement à lire les métadonnées de l’archive, identifier les entrées et les dossiers, décompresser les données puis les écrire dans un emplacement autorisé. Pour une archive chiffrée, il faut également fournir des identifiants valides et des paramètres pris en charge par le format.
Les termes extraire, décompresser et unpack sont souvent employés pour décrire la même opération. Lorsqu’un développeur parle de dézipper des fichiers, il désigne plus précisément l’extraction du contenu d’un conteneur ZIP. L’extraction d’archives est une notion plus large qui couvre également 7Z, RAR, TAR, CAB, CPIO et XZ.
En production, l’extraction ne se résume pas à un appel de méthode. Une application peut devoir contrôler les noms des entrées, sélectionner certains fichiers, conserver les dossiers, accepter des streams, gérer les mots de passe, remonter les erreurs et appliquer des limites avant toute écriture dans un stockage permanent.
Fonctionnement de l'extraction d'une archive
Un workflow C# classique comprend sept étapes :
- Recevoir l’archive depuis un chemin local, un upload, un stream ou un service de stockage.
- Vérifier que son format est accepté par l’application.
- Ouvrir le conteneur avec la classe API prévue pour ce format.
- Parcourir les entrées lorsqu’un filtrage ou une extraction sélective est nécessaire.
- Valider les chemins de sortie et les limites de ressources avant d’écrire un fichier.
- Extraire les entrées autorisées vers une destination isolée.
- Transmettre le résultat à l’étape suivante puis supprimer les données temporaires.
La classe utilisée pour l’ouverture dépend du type d’entrée, car ZIP, 7Z, RAR, TAR et CAB ne partagent pas le même modèle interne. Un service peut néanmoins exposer un workflow applicatif unique et router chaque conteneur vers l’API Aspose.ZIP correspondante.
Formats d'archive disponibles pour l'extraction
La bibliothèque prend en charge les principaux formats d’archive et de compression, notamment ZIP, 7Z, RAR, TAR, GZIP, BZIP2, XZ, LZIP, Z, CPIO, CAB et WIM. Les opérations disponibles varient : certains formats contiennent plusieurs entrées, tandis que d’autres correspondent à un stream compressé unique ou à un conteneur TAR enveloppé dans une couche de compression.
Choisissez le handler correspondant au conteneur réel plutôt que de vous fier uniquement à l’extension du fichier. Pour chaque format, vérifiez la disponibilité de l’opération attendue, du mode de chiffrement et du traitement par stream avant de l’intégrer à un pipeline automatisé.
Workflows courants d'extraction de fichiers
Extraire toute l’archive. Utilisez l’extraction complète lorsque toutes les entrées sont requises et que la source a été validée. Conservez l’arborescence si le workflow en dépend et attribuez un répertoire distinct à chaque tâche afin que des requêtes simultanées ne mélangent pas leurs résultats.
Lire uniquement certaines entrées. Parcourez Archive.Entries et appliquez les règles de l’application avant toute écriture. Cette approche convient lorsqu’un package contient de nombreux éléments mais que le workflow n’a besoin que d’un document, d’un manifest, d’un fichier de configuration ou d’un dossier connu. Elle évite aussi des écritures disque inutiles.
Traiter un stream. Les entrées basées sur des streams conviennent aux uploads ASP.NET, au stockage objet, aux bases de données et aux systèmes pilotés par messages. Définissez clairement qui possède le stream et sa durée de vie, et évitez de charger en mémoire une archive dont la taille n’est pas bornée.
Ouvrir un contenu protégé. Fournissez les identifiants via les paramètres de déchiffrement du format concerné. Les mots de passe doivent provenir d’une configuration protégée ou d’un secret store et ne doivent jamais apparaître dans les logs. En cas d’identifiants absents ou incorrects, retournez une erreur applicative contrôlée.
Traiter les fichiers volumineux comme des tâches bornées. Limitez la taille compressée, la taille après extraction, le nombre d’entrées, la durée du traitement et l’utilisation du stockage temporaire. Ces limites doivent être définies par l’application, sans déduire le niveau de confiance de la seule extension.
Ajouter Aspose.ZIP à un projet C#
Installez le package NuGet Aspose.ZIP dans un projet C# ciblant une version de .NET prise en charge sous Windows, Linux ou macOS. Référencez ensuite le namespace requis et choisissez la classe correspondant au conteneur d’entrée. Le processus doit aussi disposer d’un accès en lecture à la source, d’un accès en écriture à la destination et d’un espace temporaire compatible avec la limite d’expansion configurée.
Utilisez la commande Package Manager Console suivante :
Package Manager Console
PM> Install-Package Aspose.Zip
Exemple C# : décompresser un fichier ZIP
ZIP permet d’illustrer simplement le workflow commun. Le code ouvre l’entrée et écrit son contenu dans un répertoire de destination. Avant d’appliquer ce modèle à des fichiers externes, validez le conteneur, les chemins de sortie et les limites de ressources.
Extraire le contenu d'un ZIP dans un répertoire
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);
}
Extraire des archives en toute sécurité en production
Considérez toute archive reçue d’un utilisateur ou d’un système externe comme une entrée non fiable. Une extension attendue ne prouve pas que le conteneur est valide ou sans danger. Vérifiez que le handler sélectionné peut lire les données et rejetez les fichiers endommagés ou non pris en charge.
Avant d’écrire une entrée, résolvez son chemin par rapport au répertoire de destination autorisé. Refusez les chemins absolus, les segments de remontée vers un dossier parent et tout résultat situé hors de ce répertoire. Un nom stocké dans l’archive ne pourra ainsi pas rediriger l’écriture vers un autre emplacement du système de fichiers.
Fixez des limites pour la taille compressée, la taille totale après extraction, la taille de chaque entrée, le nombre d’entrées, la profondeur d’imbrication, la durée d’exécution et le nombre de tâches simultanées. Ces contrôles réduisent le risque de bombe de décompression et d’épuisement du stockage. Utilisez un dossier temporaire propre à chaque tâche avec des droits restreints, ne conservez que les sorties validées et nettoyez les données après un succès comme après un échec.
Les logs doivent contenir les identifiants d’opération et les informations d’état, pas les mots de passe, les noms de fichiers privés ni le contenu extrait. Si les fichiers sont ensuite analysés, prévisualisés ou scannés, traitez chaque composant en aval comme une nouvelle frontière de confiance.
Tester l'extraction dans un navigateur
L’ application gratuite d’extraction dans le navigateur permet de tester des fichiers d’exemple sans installer de logiciel. Elle est pratique pour contrôler le résultat attendu avant d’implémenter le workflow en C#.
L’outil en ligne répond à un besoin interactif. La bibliothèque .NET est destinée aux services répétables, aux traitements en arrière-plan, aux pipelines de stockage et aux applications d’entreprise qui doivent garder la validation et l’écriture des résultats sous leur propre contrôle.
Guides d'extraction par type d'archive
Les détails d’implémentation varient selon le conteneur. Un guide propre à chaque format doit préciser :
- la classe Aspose.ZIP à utiliser pour ouvrir l’archive;
- des exemples d’extraction complète et sélective;
- le comportement des mots de passe et du chiffrement;
- le traitement par stream lorsqu’il est disponible;
- les restrictions du format et les considérations de production;
- la documentation et la référence API correspondantes.
Lors du passage de cette vue d’ensemble à l’implémentation, utilisez le guide du type d’entrée réel. Vous éviterez ainsi d’appliquer les hypothèses propres à ZIP à des formats comme 7Z, RAR, TAR, CAB ou aux formats de compression par stream.
Guides d'extraction par format de fichier
Consultez les pages C# consacrées aux fichiers et ressources couramment stockés dans des archives ZIP.
</div>
</div>
Ressources sur l'extraction d'archives
- Découvrir la bibliothèque d’archivage pour .NET
- Lire la documentation développeur
- Parcourir les classes et les méthodes
- Consulter les exemples C# sur GitHub
- Installer le package depuis NuGet
FAQ sur l'extraction d'archives
1. Comment extraire les fichiers d’une archive en C# ?
Installez Aspose.ZIP, ouvrez l’entrée avec la classe correspondant à son format, puis extrayez le conteneur complet ou les entrées sélectionnées vers un répertoire ou un stream autorisé.
2. Comment extraire les fichiers d’une archive ZIP ?
Créez une instance d’Archive pour la source ZIP et appelez ExtractToDirectory pour tout décompresser. Parcourez Archive.Entries lorsque l’application doit contrôler ou enregistrer uniquement certains éléments.
3. Extraire une archive et dézipper des fichiers, est-ce la même chose ?
Dézipper concerne spécifiquement les fichiers ZIP. L’extraction est une opération plus large qui couvre également 7Z, RAR, TAR, CAB, CPIO et WIM.
4. Une application .NET peut-elle ouvrir une archive protégée par mot de passe ?
Aspose.ZIP prend en charge l’accès par mot de passe pour les formats concernés lorsque des identifiants valides et les paramètres de déchiffrement appropriés sont fournis. Le comportement exact dépend du type de conteneur.
5. Comment extraire en toute sécurité une archive reçue par upload ?
Utilisez un stockage temporaire isolé, validez chaque chemin de sortie, limitez les formats acceptés ainsi que les tailles compressée et décompressée, définissez un timeout et supprimez les données temporaires après le traitement.