ZipArchive Osztály

Definíció

Tömörített fájlok tömörített csomagját jelöli zip-archívum formátumban.

public ref class ZipArchive : IDisposable
public ref class ZipArchive : IAsyncDisposable, IDisposable
public class ZipArchive : IDisposable
public class ZipArchive : IAsyncDisposable, IDisposable
type ZipArchive = class
    interface IDisposable
type ZipArchive = class
    interface IAsyncDisposable
    interface IDisposable
Public Class ZipArchive
Implements IDisposable
Public Class ZipArchive
Implements IAsyncDisposable, IDisposable
Öröklődés
ZipArchive
Megvalósítás

Megjegyzések

A zip-archívumok és fájlbejegyzéseik manipulálásának módszerei három osztályra oszlanak: ZipFile, ZipArchiveés ZipArchiveEntry.

Címzett Használd
Zip-archívum létrehozása könyvtárból ZipFile.CreateFromDirectory
Zip-archívum tartalmának kinyerése könyvtárba ZipFile.ExtractToDirectory
Új fájlok hozzáadása meglévő zip-archívumhoz ZipArchive.CreateEntry
Fájl lekérése zip-archívumból ZipArchive.GetEntry
Az összes fájl lekérése zip-archívumból ZipArchive.Entries
Stream megnyitása egyetlen zip-archívumban lévő fájlba ZipArchiveEntry.Open
Fájl törlése zip-archívumból ZipArchiveEntry.Delete

Új bejegyzés létrehozásakor a rendszer tömöríti a fájlt, és hozzáadja a zip-csomaghoz. A CreateEntry metódus lehetővé teszi egy címtárhierarchia megadását a bejegyzés hozzáadásakor. Adja meg az új bejegyzés relatív elérési útját a zip-csomagban. Ha például egy új bejegyzést hoz létre relatív elérési úttal AddedFolder\NewFile.txt , létrehoz egy tömörített szövegfájlt egy AddedFolder nevű könyvtárban.

Ha a projekt System.IO.Compression.FileSystem szerelvényére hivatkozik, A ZipFileExtensions osztályhoz négy bővítménymetszet érhető el (a ZipArchive osztályból): CreateEntryFromFile(ZipArchive, String, String), CreateEntryFromFile(ZipArchive, String, String, CompressionLevel), ExtractToDirectory(ZipArchive, String) és ExtractToDirectory(ZipArchive, String, Boolean) (.NET Core 2.0 és újabb verziókban érhető el). Ezek a bővítménymetelyek lehetővé teszik, hogy tömörítse és tömörítse a bejegyzés tartalmát egy fájlba. A System.IO.Compression.FileSystem szerelvény nem érhető el Windows 8.x Áruházbeli alkalmazásokhoz. A Windows 8.x Áruházbeli alkalmazásokban a DeflateStream vagy GZipStream osztály használatával tömörítheti és tömörítheti a fájlokat, vagy használhatja a Windows-futtatókörnyezet típusokat <xref:Windows.Storage.Compression.Compressor> és <xref:Windows.Storage.Compression.Decompressor>.

Példák

Az első példa bemutatja, hogyan hozhat létre új bejegyzést, és hogyan írhat hozzá stream használatával.

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

Az alábbi példa bemutatja, hogyan nyithat meg zip archívumot, és hogyan haladhat végig a bejegyzések gyűjteményén.

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

A harmadik példa bemutatja, hogyan hozhat létre új bejegyzést egy zip-archívumban meglévő fájlból, és hogyan nyerheti ki az archívum tartalmát bővítménymetszetekkel. A kód végrehajtásához hivatkoznia kell a System.IO.Compression.FileSystem szerelvényre.

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

Konstruktorok

Name Description
ZipArchive(Stream, ZipArchiveMode, Boolean, Encoding)

Inicializálja az osztály új példányát a ZipArchive megadott streamben a megadott módhoz, a megadott kódolást használja a bejegyzésnevekhez, és opcionálisan nyitva hagyja a streamet.

ZipArchive(Stream, ZipArchiveMode, Boolean)

Inicializálja az osztály új példányát a ZipArchive megadott streamen a megadott módhoz, és opcionálisan nyitva hagyja a streamet.

ZipArchive(Stream, ZipArchiveMode)

Inicializálja az osztály új példányát a ZipArchive megadott streamből és a megadott móddal.

ZipArchive(Stream)

Inicializálja az ZipArchive osztály új példányát a megadott streamből.

Tulajdonságok

Name Description
Comment

Lekéri vagy beállítja az opcionális archív megjegyzést.

Entries

Lekéri a jelenleg a zip archívumban lévő bejegyzések gyűjteményét.

Mode

Olyan értéket kap, amely leírja, hogy milyen típusú műveleteket hajthat végre a zip-archívum a bejegyzéseken.

Metódusok

Name Description
CreateAsync(Stream, ZipArchiveMode, Boolean, Encoding, CancellationToken)

Aszinkron módon inicializálja és visszaadja az adott stream egy új példányát ZipArchive a megadott módban, megadva, hogy nyitva hagyja-e a streamet, opcionális kódolással és opcionális lemondási jogkivonattal.

CreateEntry(String, CompressionLevel)

Létrehoz egy üres bejegyzést, amely a megadott bejegyzésnévvel és tömörítési szinttel rendelkezik a zip archívumban.

CreateEntry(String)

Létrehoz egy üres bejegyzést, amely a megadott elérési utat és bejegyzésnevet jeleníti meg a zip archívumban.

Dispose()

Felszabadítja az osztály aktuális példánya ZipArchive által használt erőforrásokat.

Dispose(Boolean)

Az osztály jelenlegi példánya által használt nem felügyelt erőforrások kiadására Dispose() szolgáló metódusok és Finalize() metódusok meghívjákZipArchive, és opcionálisan befejezik az archívum írását, és felszabadítják a felügyelt erőforrásokat.

DisposeAsync()

Tömörített fájlok tömörített csomagját jelöli zip-archívum formátumban.

DisposeAsyncCore()

Tömörített fájlok tömörített csomagját jelöli zip-archívum formátumban.

Equals(Object)

Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal.

(Öröklődés forrása Object)
GetEntry(String)

Lekéri a zip archívumban megadott bejegyzés burkolójának értékét.

GetHashCode()

Ez az alapértelmezett kivonatoló függvény.

(Öröklődés forrása Object)
GetType()

Lekéri az Type aktuális példányt.

(Öröklődés forrása Object)
MemberwiseClone()

Az aktuális Objectpéldány sekély másolatát hozza létre.

(Öröklődés forrása Object)
ToString()

Az aktuális objektumot jelképező sztringet ad vissza.

(Öröklődés forrása Object)

Bővítő metódusok

Name Description
ConfigureAwait(IAsyncDisposable, Boolean)

Konfigurálja, hogy az aszinkron eldobható feladatok hogyan lesznek végrehajtva.

CreateEntryFromFile(ZipArchive, String, String, CompressionLevel)

A fájl archiválása a megadott tömörítési szinttel történő tömörítéssel és a zip archívumba való hozzáadásával.

CreateEntryFromFile(ZipArchive, String, String)

Egy fájl archiválása tömörítéssel és a zip archívumba való hozzáadásával.

CreateEntryFromFileAsync(ZipArchive, String, String, CancellationToken)

Aszinkron módon hozzáad egy fájlt a fájlrendszerből az archívumhoz a megadott bejegyzésnév alatt.

CreateEntryFromFileAsync(ZipArchive, String, String, CompressionLevel, CancellationToken)

Aszinkron módon hozzáad egy fájlt a fájlrendszerből az archívumhoz a megadott bejegyzésnév alatt.

ExtractToDirectory(ZipArchive, String, Boolean)

Kinyeri az archívumban lévő összes fájlt a fájlrendszer egyik könyvtárába.

ExtractToDirectory(ZipArchive, String)

Kinyeri a zip archívumban lévő összes fájlt a fájlrendszer egyik könyvtárába.

ExtractToDirectoryAsync(ZipArchive, String, Boolean, CancellationToken)

Kinyeri az archívumban lévő összes fájlt a fájlrendszer egyik könyvtárába. Előfordulhat, hogy a megadott könyvtár már létezik.

ExtractToDirectoryAsync(ZipArchive, String, CancellationToken)

Aszinkron módon kinyeri az archívumban lévő összes fájlt a fájlrendszer egyik könyvtárába. A megadott könyvtár már létezhet.

A következőre érvényes:

Lásd még