34 votes

Quelle est la meilleure façon / la plus simple de créer une archive ZIP dans .NET?

Quelle méthode pensez-vous est la "meilleure".

  • Utilisez le System.IO.Packaging namespace?
  • Utilisez interop avec le shell?
  • Bibliothèque tierce partie pour .NET?
  • Interopérer avec une DLL open source non gérée?

[Je peux cibler Framework 3.5; meilleur = plus facile à concevoir, à mettre en œuvre et à maintenir.]

Je suis surtout intéressé par pourquoi vous pensez que l'approche choisie est la meilleure.

23voto

Greg Dean Points 12048

J'ai toujours utilisé SharpZipLib

Oublié la partie pourquoi: Principalement parce que ça fait longtemps que ça existe. Il est bien documenté et possède une API intuitive. De plus, il est open source si vous aimez ce genre de chose.

16voto

RedawgTS Points 151

J'ai trouvé la bibliothèque DotNetZip comme le moyen le plus simple de travailler avec des fichiers zip. SharpZipLib est une solution beaucoup plus puissante et flexible.

16voto

Cheeso Points 87022

DotNetZip est très simple à utiliser. Je l'aime parce qu'il est entièrement géré - pas de shell interaction nécessaire. Le modèle de programmation est plus simple et plus propre que celle de la coque. Il est également plus simple que SharpZipLib ainsi que l'Emballage des classes ajouté .NET 3.0. Il est gratuit, petites, activement maintenu.

Il est beaucoup mieux que le J# option que l'un poster offert - J# est un énorme moment de l'exécution et un géant de comprimés à avaler, pour obtenir le support des archives ZIP. Aussi J# soutien à l'arrêt du traitement. Probablement pas une bonne idée d'introduire de nouvelles dépendances sur J#.

Exemple de code pour DotNetZip:

  try
  {
      using (ZipFile zip = new ZipFile(args[0], System.Console.Out))
      {
          zip.AddDirectory(args[1]); // recurses subdirectories
          zip.Save();
      }
  }
  catch (System.Exception ex1)
  {
      System.Console.Error.WriteLine("exception: " + ex1);
  }

DotNetZip travaille avec .NET v2.0, 3.0, 3.5 ainsi que Compact Framework v2.0 et 3.5. Il n'ZIP fichiers, noms de fichiers Unicode, les commentaires, les mots de passe. Il ne ZIP64 ainsi que des archives Auto-extractibles. C'est RAPIDE. Essayez-la.

15voto

Sheridan Points 26778

Je me rends compte que c'est une vieille question maintenant, mais j'ai juste pensé que je pourrais ajouter de plus à ce jour de réponse. Si vous êtes en utilisant .NET 4.5, puis vous pouvez enregistrer par programmation de plusieurs fichiers dans un dossier zip facilement à l'aide de la nouvelle construction, en ZipFile classe.

Tout d'abord, vous aurez besoin pour préparer vos fichiers dans un nouveau dossier (Directory.CreateDirectory, File.Move) et alors vous pouvez simplement utiliser l' ZipFile.CreateFromDirectory Méthode (adapté à partir de la page du lien):

string filePathOfNewFolder = @"c:\example\start";
string zipFilePath = @"c:\example\result.zip";

ZipFile.CreateFromDirectory(filePathOfNewFolder, zipFilePath);

2voto

Matthew Points 1907

Le GZipStream et DeflateStream classes sous Système.IO.La Compression de l'espace de noms rendent assez facile à zip choses.

Mise à JOUR: Les commentaires indiquent que ces classes ne permettent pas de manipuler un fichier Zip. Cependant, le J# dll contiennent les fonctionnalités en java.util et java.io espaces de noms. Pour plus de détails, voir le Projet de Code de l'article par dmihailescu les détails de leur utilisation et fournit des exemples de code.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X