ZipArchive Sınıf
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
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. |