Créer une archive ZIP plate en C#

Lorsque vous travaillez avec des archives ZIP, vous pouvez rencontrer un scénario où un fichier ZIP contient d’autres fichiers ZIP, créant une structure imbriquée. Si vous souhaitez rationaliser cela en extrayant toutes les archives ZIP internes dans l’archive externe, vous êtes au bon endroit. Dans cet article, nous allons explorer comment créer une archive ZIP plate en C# en utilisant le puissant Aspose.ZIP pour .NET.

Table des matières

Aperçu de l’API .NET pour créer des archives ZIP plates

Pour créer des archives ZIP plates, nous allons utiliser la bibliothèque Aspose.ZIP pour .NET. Cette API d’archivage robuste vous permet de créer et d’extraire divers formats d’archive, y compris ZIP, TAR, GZip et 7z. Vous pouvez facilement installer cette bibliothèque depuis NuGet ou télécharger son DLL depuis la section des téléchargements.

PM> Install-Package Aspose.Zip

Étapes pour créer une archive ZIP plate en C#

Pour mieux comprendre la structure d’une archive ZIP plate, considérez l’exemple suivant. Initialement, nous avons une archive ZIP contenant une autre archive ZIP :

parent.zip
 ├ first.txt
 ├ inner.zip
 │ ├ game.exe
 │ └ subitem.bin
 └ picture.gif

Après avoir transformé cette archive ZIP en une structure plate, toutes les entrées de l’archive ZIP interne seront extraites dans l’archive ZIP parent, ce qui donnera la structure suivante :

flatten.zip
 ├ first.txt
 ├ picture.gif
 ├ game.exe
 └ subitem.bin

Étapes d’implémentation

Voici comment créer programmétiquement une archive ZIP plate en C# :

  1. Charger l’archive ZIP parent : Utilisez la classe Archive pour charger l’archive ZIP parent.
  2. Initialiser les listes : Créez des listes pour stocker :
    • Les entrées à supprimer de l’archive ZIP parent
    • Les entrées extraites et leurs noms
  3. Parcourir les entrées de l’archive : Parcourez chaque ArchiveEntry dans l’archive ZIP parent à l’aide de la collection Archive.Entries.
  4. Traiter chaque entrée :
    • Vérifiez si l’entrée est une archive ZIP en utilisant ArchiveEntry.Name.EndsWith(".zip", StringComparison.InvariantCultureIgnoreCase).
    • Si c’est le cas, ajoutez-la à la liste des entrées à supprimer.
    • Ouvrez l’entrée dans un objet MemoryStream en utilisant ArchiveEntry.Open().CopyTo(MemoryStream).
    • Parcourez les entrées de l’archive ZIP interne, en effectuant les actions suivantes :
      • Ajoutez le nom de chaque entrée à la liste des entrées à ajouter.
      • Chargez chaque entrée dans un MemoryStream en utilisant ArchiveEntry.Open().CopyTo(MemoryStream).
      • Ajoutez l’entrée à la liste des entrées à ajouter à l’archive ZIP parent.
  5. Supprimer les entrées ZIP internes : Parcourez la liste des archives ZIP internes et supprimez chaque entrée en utilisant la méthode Archive.DeleteEntry(ArchiveEntry).
  6. Ajouter de nouvelles entrées à l’archive ZIP parent : Parcourez la liste des entrées à ajouter et incluez chaque entrée en utilisant la méthode Archive.CreateEntry(String, Stream).
  7. Enregistrer l’archive ZIP parent : Enfin, enregistrez l’archive ZIP parent modifiée en utilisant la méthode Archive.Save(String).

Voici un exemple de code démontrant comment créer une archive ZIP plate en C# :

Obtenez une licence API gratuite

Vous pouvez obtenir une licence temporaire gratuite pour utiliser Aspose.ZIP pour .NET sans aucune limitation d’évaluation.

Conclusion

Dans ce tutoriel, vous avez appris à créer efficacement une archive ZIP plate en C#. Nous avons démontré le processus d’extraction des archives ZIP internes dans l’archive ZIP parent, évitant ainsi efficacement les dossiers imbriqués. Pour plus d’informations, n’hésitez pas à consulter la documentation d’Aspose.ZIP pour .NET, ou contactez-nous via notre forum.

Voir aussi