ZipArchive Sınıf

Tanım

Sıkıştırılmış dosya paketini zip arşiv biçiminde temsil eder.

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
Devralma
ZipArchive
Uygulamalar

Açıklamalar

Zip arşivlerini ve bunların dosya girdilerini düzenleme yöntemleri üç sınıfa yayılır: ZipFile, ZipArchiveve ZipArchiveEntry.

İçin Kullan
Dizinden zip arşivi oluşturma ZipFile.CreateFromDirectory
Zip arşivinin içeriğini dizine ayıklama ZipFile.ExtractToDirectory
Mevcut zip arşivine yeni dosyalar ekleme ZipArchive.CreateEntry
Zip arşivinden dosya alma ZipArchive.GetEntry
Zip arşivinden tüm dosyaları alma ZipArchive.Entries
Zip arşivinde bulunan tek bir dosyaya akış açma ZipArchiveEntry.Open
Zip arşivinden dosya silme ZipArchiveEntry.Delete

Yeni bir girdi oluşturduğunuzda, dosya sıkıştırılır ve zip paketine eklenir. yöntemi, CreateEntry girdiyi eklerken bir dizin hiyerarşisi belirtmenizi sağlar. Yeni girişin göreli yolunu zip paketine eklersiniz. Örneğin, göreli yolu AddedFolder\NewFile.txt olan yeni bir giriş oluşturmak, AddFolder adlı dizinde sıkıştırılmış bir metin dosyası oluşturur.

Projenizde System.IO.Compression.FileSystem derlemesine başvuruyorsanız, ZipFileExtensions sınıfı için dört uzantı yöntemine (ZipArchive sınıfından) erişebilirsiniz: CreateEntryFromFile(ZipArchive, String, String), CreateEntryFromFile(ZipArchive, String, String, CompressionLevel), ExtractToDirectory(ZipArchive, String) ve ExtractToDirectory(ZipArchive, String, Boolean) (.NET Core 2.0 ve sonraki sürümlerde kullanılabilir). Bu uzantı yöntemleri, bir dosyaya girişin içeriğini sıkıştırmanızı ve sıkıştırmasını kaldırmanızı sağlar. System.IO.Compression.FileSystem derlemesi Windows 8.x Store uygulamalarında kullanılamaz. Windows 8.x Store uygulamalarında, DeflateStream veya GZipStream sınıfını kullanarak dosyaları sıkıştırabilir ve açabilir veya <xref:Windows.Storage.Compression.Compressor> ve <xref:Windows.Storage.Compression.Decompressor> Windows Çalışma Zamanı türlerini kullanabilirsiniz.

Örnekler

İlk örnekte yeni bir girişin nasıl oluşturulacağı ve akış kullanılarak bu girdiye nasıl yazılabileceği gösterilmektedir.

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

Aşağıdaki örnekte zip arşivini açma ve girdi koleksiyonunda yineleme işlemleri gösterilmektedir.

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

Üçüncü örnekte, mevcut bir dosyadan zip arşivinde yeni bir giriş oluşturmak ve arşiv içeriğini ayıklamak için uzantı yöntemlerinin nasıl kullanılacağı gösterilmektedir. Kodu yürütmek için derlemeye başvurmanız System.IO.Compression.FileSystem gerekir.

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

Oluşturucular

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

Belirtilen mod için belirtilen akışta sınıfının yeni bir örneğini ZipArchive başlatır, girdi adları için belirtilen kodlamayı kullanır ve isteğe bağlı olarak akışı açık bırakır.

ZipArchive(Stream, ZipArchiveMode, Boolean)

Belirtilen mod için belirtilen akışta sınıfının yeni bir örneğini ZipArchive başlatır ve isteğe bağlı olarak akışı açık bırakır.

ZipArchive(Stream, ZipArchiveMode)

Sınıfın ZipArchive yeni bir örneğini belirtilen akıştan ve belirtilen modla başlatır.

ZipArchive(Stream)

Belirtilen akıştan sınıfının yeni bir örneğini ZipArchive başlatır.

Özellikler

Name Description
Comment

İsteğe bağlı arşiv açıklamasını alır veya ayarlar.

Entries

Şu anda zip arşivinde olan girdilerin koleksiyonunu alır.

Mode

Zip arşivinin girdilerde gerçekleştirebileceği eylemin türünü açıklayan bir değer alır.

Yöntemler

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

Belirli bir akışta belirtilen modda zaman uyumsuz olarak uygulamasını başlatır ve yeni bir örneğini ZipArchive döndürür ve isteğe bağlı kodlama ve isteğe bağlı bir iptal belirteci ile akışın açık bırakılıp bırakılmayacağını belirtir.

CreateEntry(String, CompressionLevel)

Zip arşivinde belirtilen giriş adına ve sıkıştırma düzeyine sahip boş bir girdi oluşturur.

CreateEntry(String)

Zip arşivinde belirtilen yolu ve giriş adını içeren boş bir girdi oluşturur.

Dispose()

Sınıfının geçerli örneği ZipArchive tarafından kullanılan kaynakları serbest bırakır.

Dispose(Boolean)

sınıfının geçerli örneği Dispose() tarafından kullanılan yönetilmeyen kaynakları serbest bırakmak için ve Finalize() yöntemleri tarafından ZipArchive çağrılır ve isteğe bağlı olarak arşivi yazmayı tamamlar ve yönetilen kaynakları serbest bırakır.

DisposeAsync()

Sıkıştırılmış dosya paketini zip arşiv biçiminde temsil eder.

DisposeAsyncCore()

Sıkıştırılmış dosya paketini zip arşiv biçiminde temsil eder.

Equals(Object)

Belirtilen nesnenin geçerli nesneye eşit olup olmadığını belirler.

(Devralındığı yer: Object)
GetEntry(String)

Zip arşivinde belirtilen girdi için bir sarmalayıcı alır.

GetHashCode()

Varsayılan karma işlevi işlevi görür.

(Devralındığı yer: Object)
GetType()

Geçerli örneğin Type alır.

(Devralındığı yer: Object)
MemberwiseClone()

Geçerli Objectbasit bir kopyasını oluşturur.

(Devralındığı yer: Object)
ToString()

Geçerli nesneyi temsil eden bir dize döndürür.

(Devralındığı yer: Object)

Uzantı Metotları

Name Description
ConfigureAwait(IAsyncDisposable, Boolean)

Zaman uyumsuz bir atılabilir öğeden döndürülen görevlerde awaits işleminin nasıl gerçekleştirileceğini yapılandırılır.

CreateEntryFromFile(ZipArchive, String, String, CompressionLevel)

Belirtilen sıkıştırma düzeyini kullanarak sıkıştırıp zip arşivine ekleyerek dosyayı arşivler.

CreateEntryFromFile(ZipArchive, String, String)

Dosyayı sıkıştırıp zip arşivine ekleyerek arşivler.

CreateEntryFromFileAsync(ZipArchive, String, String, CancellationToken)

Dosya sisteminden belirtilen giriş adı altındaki arşive zaman uyumsuz olarak bir dosya ekler.

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

Dosya sisteminden belirtilen giriş adı altındaki arşive zaman uyumsuz olarak bir dosya ekler.

ExtractToDirectory(ZipArchive, String, Boolean)

Arşivdeki tüm dosyaları dosya sistemindeki bir dizine ayıklar.

ExtractToDirectory(ZipArchive, String)

Zip arşivindeki tüm dosyaları dosya sistemindeki bir dizine ayıklar.

ExtractToDirectoryAsync(ZipArchive, String, Boolean, CancellationToken)

Arşivdeki tüm dosyaları dosya sistemindeki bir dizine ayıklar. Belirtilen dizin zaten var olabilir.

ExtractToDirectoryAsync(ZipArchive, String, CancellationToken)

Arşivdeki tüm dosyaları zaman uyumsuz olarak dosya sistemindeki bir dizine ayıklar. Belirtilen dizin zaten var olabilir.

Şunlara uygulanır

Ayrıca bkz.