Partager via


ZipArchive Classe

Définition

Représente un package de fichiers compressés au format d'archivage zip.

public ref class ZipArchive : IDisposable
public class ZipArchive : IDisposable
type ZipArchive = class
    interface IDisposable
Public Class ZipArchive
Implements IDisposable
Héritage
ZipArchive
Implémente

Remarques

Les méthodes de manipulation des archives zip et de leurs entrées de fichier sont réparties sur trois classes : ZipFile, ZipArchiveet ZipArchiveEntry.

À Utiliser
Create une archive zip à partir d’un répertoire ZipFile.CreateFromDirectory
Extraire le contenu d’une archive zip dans un répertoire ZipFile.ExtractToDirectory
Ajouter de nouveaux fichiers à une archive zip existante ZipArchive.CreateEntry
Récupérer un fichier à partir d’une archive zip ZipArchive.GetEntry
Récupérer tous les fichiers d’une archive zip ZipArchive.Entries
Ouvrir un flux sur un seul fichier contenu dans une archive zip ZipArchiveEntry.Open
Supprimer un fichier d’une archive zip ZipArchiveEntry.Delete

Lorsque vous créez une entrée, le fichier est compressé et ajouté au package zip. La CreateEntry méthode vous permet de spécifier une hiérarchie de répertoires lors de l’ajout de l’entrée. Vous incluez le chemin relatif de la nouvelle entrée dans le package zip. Par exemple, la création d’une entrée avec un chemin relatif de AddedFolder\NewFile.txt crée un fichier texte compressé dans un répertoire nommé AddedFolder.

Si vous référencez l’assembly System.IO.Compression.FileSystem dans votre projet, vous pouvez accéder à quatre méthodes d’extension (à partir de la ZipFileExtensions classe) pour la ZipArchive classe : CreateEntryFromFile(ZipArchive, String, String), CreateEntryFromFile(ZipArchive, String, String, CompressionLevel), ExtractToDirectory(ZipArchive, String)et ExtractToDirectory(ZipArchive, String, Boolean) (disponibles dans .NET Core 2.0 et versions ultérieures). Ces méthodes d’extension vous permettent de compresser et de décompresser le contenu de l’entrée dans un fichier. L’assembly System.IO.Compression.FileSystem n’est pas disponible pour les applications Windows 8.x Store. Dans les applications du Store Windows 8.x, vous pouvez compresser et décompresser des fichiers à l’aide de la DeflateStream classe ou GZipStream , ou vous pouvez utiliser les types Compressor Windows Runtime et Decompressor.

Exemples

Le premier exemple montre comment créer une entrée et y écrire à l’aide d’un flux.

using System;
using System.IO;
using System.IO.Compression;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            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("========================");
                    }
                }
            }
        }
    }
}
Imports System.IO
Imports System.IO.Compression

Module Module1

    Sub Main()
        Using zipToOpen As FileStream = New FileStream("c:\users\exampleuser\release.zip", FileMode.Open)
            Using archive As ZipArchive = New ZipArchive(zipToOpen, ZipArchiveMode.Update)
                Dim readmeEntry As ZipArchiveEntry = archive.CreateEntry("Readme.txt")
                Using writer As StreamWriter = New StreamWriter(readmeEntry.Open())
                    writer.WriteLine("Information about this package.")
                    writer.WriteLine("========================")
                End Using
            End Using
        End Using
    End Sub

End Module

L’exemple suivant montre comment ouvrir une archive zip et itérer au sein de la collection d’entrées.

using System;
using System.IO;
using System.IO.Compression;

class Program
{
    static void Main(string[] args)
    {
        string zipPath = @".\result.zip";

        Console.WriteLine("Provide path where to extract the zip file:");
        string extractPath = Console.ReadLine();

        // Normalizes the path.
        extractPath = Path.GetFullPath(extractPath);

        // Ensures that the last character on the extraction path
        // is the directory separator char.
        // Without this, a malicious zip file could try to traverse outside of the expected
        // extraction path.
        if (!extractPath.EndsWith(Path.DirectorySeparatorChar.ToString(), StringComparison.Ordinal))
            extractPath += Path.DirectorySeparatorChar;

        using (ZipArchive archive = ZipFile.OpenRead(zipPath))
        {
            foreach (ZipArchiveEntry entry in archive.Entries)
            {
                if (entry.FullName.EndsWith(".txt", StringComparison.OrdinalIgnoreCase))
                {
                    // Gets the full path to ensure that relative segments are removed.
                    string destinationPath = Path.GetFullPath(Path.Combine(extractPath, entry.FullName));

                    // Ordinal match is safest, case-sensitive volumes can be mounted within volumes that
                    // are case-insensitive.
                    if (destinationPath.StartsWith(extractPath, StringComparison.Ordinal))
                        entry.ExtractToFile(destinationPath);
                }
            }
        }
    }
}
Imports System.IO
Imports System.IO.Compression

Module Module1

    Sub Main()
        Dim zipPath As String = ".\result.zip"

        Console.WriteLine("Provide path where to extract the zip file:")
        Dim extractPath As String = Console.ReadLine()

        ' Normalizes the path.
        extractPath = Path.GetFullPath(extractPath)

        ' Ensures that the last character on the extraction path
        ' is the directory separator char. 
        ' Without this, a malicious zip file could try to traverse outside of the expected
        ' extraction path.
        If Not extractPath.EndsWith(Path.DirectorySeparatorChar.ToString(), StringComparison.Ordinal) Then
            extractPath += Path.DirectorySeparatorChar
        End If

        Using archive As ZipArchive = ZipFile.OpenRead(zipPath)
            For Each entry As ZipArchiveEntry In archive.Entries
                If entry.FullName.EndsWith(".txt", StringComparison.OrdinalIgnoreCase) Then

                    ' Gets the full path to ensure that relative segments are removed.
                    Dim destinationPath As String = Path.GetFullPath(Path.Combine(extractPath, entry.FullName))
                    
                    ' Ordinal match is safest, case-sensitive volumes can be mounted within volumes that
                    ' are case-insensitive.
                    If destinationPath.StartsWith(extractPath, StringComparison.Ordinal) Then 
                        entry.ExtractToFile(destinationPath)
                    End If

                End If
            Next
        End Using
    End Sub

End Module

Le troisième exemple montre comment utiliser des méthodes d’extension pour créer une entrée dans une archive zip à partir d’un fichier existant et extraire le contenu de l’archive. Vous devez référencer l’assembly System.IO.Compression.FileSystem pour exécuter le code.

using System;
using System.IO;
using System.IO.Compression;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            string zipPath = @"c:\users\exampleuser\start.zip";
            string extractPath = @"c:\users\exampleuser\extract";
            string newFile = @"c:\users\exampleuser\NewFile.txt";

            using (ZipArchive archive = ZipFile.Open(zipPath, ZipArchiveMode.Update))
            {
                archive.CreateEntryFromFile(newFile, "NewEntry.txt");
                archive.ExtractToDirectory(extractPath);
            }
        }
    }
}
Imports System.IO
Imports System.IO.Compression

Module Module1

    Sub Main()
        Dim zipPath As String = "c:\users\exampleuser\end.zip"
        Dim extractPath As String = "c:\users\exampleuser\extract"
        Dim newFile As String = "c:\users\exampleuser\NewFile.txt"

        Using archive As ZipArchive = ZipFile.Open(zipPath, ZipArchiveMode.Update)
            archive.CreateEntryFromFile(newFile, "NewEntry.txt", CompressionLevel.Fastest)
            archive.ExtractToDirectory(extractPath)
        End Using
    End Sub

End Module

Constructeurs

ZipArchive(Stream)

Initialise une nouvelle instance de la classe ZipArchive à partir du flux spécifié.

ZipArchive(Stream, ZipArchiveMode)

Initialise une nouvelle instance de la classe ZipArchive à partir du flux spécifié et avec le mode spécifié.

ZipArchive(Stream, ZipArchiveMode, Boolean)

Initialise une nouvelle instance de la classe ZipArchive sur le flux de données spécifié pour le mode spécifié, et laisse éventuellement le flux ouvert.

ZipArchive(Stream, ZipArchiveMode, Boolean, Encoding)

Initialise une nouvelle instance de la classe ZipArchive sur le flux spécifié pour le mode spécifié, utilise l’encodage spécifié pour les noms d’entrée, et permet éventuellement de laisser le flux ouvert.

Propriétés

Comment

Obtient ou définit le commentaire d’archive facultatif.

Entries

Obtient la collection d’entrées figurant actuellement dans l’archive zip.

Mode

Obtient une valeur qui décrit le type d'action que l'archive zip peut exécuter sur des entrées.

Méthodes

CreateEntry(String)

Crée une entrée vide qui porte le chemin d'accès et le nom d'entrée spécifiés dans l'archive zip.

CreateEntry(String, CompressionLevel)

Crée une entrée vide qui porte le nom d'entrée et le niveau de compression spécifiés dans l'archive zip.

Dispose()

Libère les ressources utilisées par l'instance actuelle de la classe ZipArchive.

Dispose(Boolean)

Appelée par les méthodes Dispose() et Finalize() pour libérer les ressources non managées utilisées par l’instance actuelle de la classe ZipArchive, et éventuellement finit d’écrire l’archive et libère les ressources managées.

Equals(Object)

Détermine si l'objet spécifié est égal à l'objet actuel.

(Hérité de Object)
GetEntry(String)

Récupère un wrapper pour l'entrée spécifiée dans l'archive Zip.

GetHashCode()

Fait office de fonction de hachage par défaut.

(Hérité de Object)
GetType()

Obtient le Type de l'instance actuelle.

(Hérité de Object)
MemberwiseClone()

Crée une copie superficielle du Object actuel.

(Hérité de Object)
ToString()

Retourne une chaîne qui représente l'objet actuel.

(Hérité de Object)

Méthodes d’extension

CreateEntryFromFile(ZipArchive, String, String)

Archive un fichier en le compressant et en l'ajoutant à l'archive zip.

CreateEntryFromFile(ZipArchive, String, String, CompressionLevel)

Archive un fichier en le compressant à l'aide du niveau de compression spécifié et en l'ajoutant à l'archive ZIP.

ExtractToDirectory(ZipArchive, String)

Extrait tous les fichiers de l’archive zip vers un répertoire dans le système de fichiers.

ExtractToDirectory(ZipArchive, String, Boolean)

Extrait tous les fichiers de l’archive dans un répertoire du système de fichiers.

S’applique à

Voir aussi