web-dev-qa-db-fra.com

Comment ajouter des fichiers à une archive Zip existante

Comment puis-je ajouter un fichier (presque toujours un seul fichier .csv) à un fichier Zip existant?

18
user3408397

Étant donné que vous êtes dans .NET 4.5, vous pouvez utiliser la classe ZipArchive (System.IO.Compression) pour y parvenir. Voici la documentation MSDN: ( MSDN ).

Voici leur exemple, il écrit juste du texte, mais vous pouvez lire dans un fichier .csv et l'écrire dans votre nouveau fichier. Pour simplement copier le fichier, vous utiliseriez CreateFileFromEntry, qui est une méthode d'extension pour ZipArchive.

using (FileStream zipToOpen = new FileStream(@"c:\users\exampleuser\release.Zip", FileMode.Open))
{
   using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
   {
       ZipArchiveEntry readmeEntry = archive.CreateEntry("Readme.txt");
       using (StreamWriter writer = new StreamWriter(readmeEntry.Open()))
       {
           writer.WriteLine("Information about this package.");
           writer.WriteLine("========================");
       }
   }
}
27
BradleyDotNET

Pour créer, extraire et ouvrir des archives Zip, nous pouvons utiliser ZipFile Class avec référence: System.IO.Compression.FileSystem. Pour .NET 4.5.2 et versions antérieures, nous devons également ajouter une référence: System.IO.Compression. Voici la méthode pour ajouter des fichiers à Zip:

    public static void AddFilesToZip(string zipPath, string[] files)
    {
        if (files == null || files.Length == 0)
        {
            return;
        }

        using (var zipArchive = ZipFile.Open(zipPath, ZipArchiveMode.Update))
        {
            foreach (var file in files)
            {
                var fileInfo = new FileInfo(file);
                zipArchive.CreateEntryFromFile(fileInfo.FullName,  fileInfo.Name);
            }
        }
    }
17
Feiyu Zhou

Le moyen le plus simple est d'obtenir DotNetZip sur http://dotnetzip.codeplex.com/

L'ajout de fichiers peut être aussi simple que

String[] filenames = { @"ReadMe.txt",
                       @"c:\data\collection.csv" ,
                       @"c:\reports\AnnualSummary.pdf"
                     } ;
using ( ZipFile Zip = new ZipFile() )
{
  Zip.AddFiles(filenames);
  Zip.Save("Archive.Zip");
}

D'autres types de mises à jour sont tout aussi triviaux:

using (ZipFile Zip = ZipFile.Read("ExistingArchive.Zip"))
{

  // update an existing item in the Zip file
  Zip.UpdateItem("Portfolio.doc"); 

  // remove an item from the Zip file
  Zip["OldData.txt"].RemoveEntry();

  // rename an item in the Zip file
  Zip["Internationalization.doc"].FileName = "i18n.doc";

  // add a comment to the archive
  Zip.Comment = "This Zip archive was updated " + System.DateTime.ToString("G");

  Zip.Save();
}

Modifié pour noter: DotNetZip habitait à Codeplex. Codeplex a été fermé. L'ancienne archive est toujours [disponible sur Codeplex] [1]. Il semble que le code ait migré vers Github:


7
Nicholas Carey