ZipArchive Kelas
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Mewakili paket file terkompresi dalam format arsip zip.
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
- Warisan
-
ZipArchive
- Penerapan
Keterangan
Metode untuk memanipulasi arsip zip dan entri filenya tersebar di tiga kelas: ZipFile, , ZipArchivedan ZipArchiveEntry.
| Untuk | Menggunakan |
|---|---|
| Membuat arsip zip dari direktori | ZipFile.CreateFromDirectory |
| Mengekstrak konten arsip zip ke direktori | ZipFile.ExtractToDirectory |
| Menambahkan file baru ke arsip zip yang sudah ada | ZipArchive.CreateEntry |
| Mengambil file dari arsip zip | ZipArchive.GetEntry |
| Mengambil semua file dari arsip zip | ZipArchive.Entries |
| Membuka aliran ke satu file yang terkandung dalam arsip zip | ZipArchiveEntry.Open |
| Menghapus file dari arsip zip | ZipArchiveEntry.Delete |
Saat Anda membuat entri baru, file dikompresi dan ditambahkan ke paket zip. Metode ini CreateEntry memungkinkan Anda menentukan hierarki direktori saat menambahkan entri. Anda menyertakan jalur relatif entri baru dalam paket zip. Misalnya, membuat entri baru dengan jalur AddedFolder\NewFile.txt relatif membuat file teks terkompresi di direktori bernama AddedFolder.
Jika Anda mereferensikan perakitan System.IO.Compression.FileSystem dalam proyek Anda, Anda dapat mengakses empat metode ekstensi (dari kelas ZipFileExtensions) untuk kelas ZipArchive: CreateEntryFromFile(ZipArchive, String, String), CreateEntryFromFile(ZipArchive, String, String, CompressionLevel), ExtractToDirectory(ZipArchive, String), dan ExtractToDirectory(ZipArchive, String, Boolean) (tersedia di .NET Core 2.0 dan versi yang lebih baru). Metode ekstensi ini memungkinkan Anda mengompresi dan mendekompresi konten entri ke file. Rakitan System.IO.Compression.FileSystem tidak tersedia untuk aplikasi Windows 8.x Store. Di aplikasi Windows 8.x Store, Anda dapat mengompresi dan mendekompresi file dengan menggunakan kelas DeflateStream atau GZipStream, atau Anda dapat menggunakan jenis Windows Runtime <xref:Windows.Storage.Compression.Compressor> dan <xref:Windows.Storage.Compression.Decompressor>.
Contoh
Contoh pertama menunjukkan cara membuat entri baru dan menulisnya dengan menggunakan aliran.
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
Contoh berikut menunjukkan cara membuka arsip zip dan melakukan iterasi melalui kumpulan entri.
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
Contoh ketiga menunjukkan cara menggunakan metode ekstensi untuk membuat entri baru dalam arsip zip dari file yang ada dan mengekstrak konten arsip. Anda harus mereferensikan assembly System.IO.Compression.FileSystem untuk menjalankan kode.
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
Konstruktor
| Nama | Deskripsi |
|---|---|
| ZipArchive(Stream, ZipArchiveMode, Boolean, Encoding) |
Menginisialisasi instans ZipArchive baru kelas pada aliran yang ditentukan untuk mode yang ditentukan, menggunakan pengodean yang ditentukan untuk nama entri, dan secara opsional membiarkan aliran terbuka. |
| ZipArchive(Stream, ZipArchiveMode, Boolean) |
Menginisialisasi instans ZipArchive baru kelas pada aliran yang ditentukan untuk mode yang ditentukan, dan secara opsional membiarkan aliran terbuka. |
| ZipArchive(Stream, ZipArchiveMode) |
Menginisialisasi instans ZipArchive baru kelas dari aliran yang ditentukan dan dengan mode yang ditentukan. |
| ZipArchive(Stream) |
Menginisialisasi instans ZipArchive baru kelas dari aliran yang ditentukan. |
Properti
| Nama | Deskripsi |
|---|---|
| Comment |
Mendapatkan atau mengatur komentar arsip opsional. |
| Entries |
Mendapatkan kumpulan entri yang saat ini ada di arsip zip. |
| Mode |
Mendapatkan nilai yang menjelaskan jenis tindakan yang dapat dilakukan arsip zip pada entri. |
Metode
| Nama | Deskripsi |
|---|---|
| CreateAsync(Stream, ZipArchiveMode, Boolean, Encoding, CancellationToken) |
Menginisialisasi dan mengembalikan instans ZipArchive baru secara asinkron pada aliran tertentu dalam mode yang ditentukan, menentukan apakah akan membiarkan aliran terbuka, dengan pengodean opsional dan token pembatalan opsional. |
| CreateEntry(String, CompressionLevel, ReadOnlySpan<Char>, ZipEncryptionMethod) |
Mewakili paket file terkompresi dalam format arsip zip. |
| CreateEntry(String, CompressionLevel) |
Membuat entri kosong yang memiliki nama entri dan tingkat kompresi yang ditentukan dalam arsip zip. |
| CreateEntry(String, ReadOnlySpan<Char>, ZipEncryptionMethod) |
Mewakili paket file terkompresi dalam format arsip zip. |
| CreateEntry(String) |
Membuat entri kosong yang memiliki jalur dan nama entri yang ditentukan dalam arsip zip. |
| Dispose() |
Merilis sumber daya yang digunakan oleh instans ZipArchive kelas saat ini. |
| Dispose(Boolean) |
Dipanggil oleh Dispose() metode dan Finalize() untuk merilis sumber daya yang tidak dikelola yang digunakan oleh instans ZipArchive kelas saat ini, dan secara opsional selesai menulis arsip dan merilis sumber daya terkelola. |
| DisposeAsync() |
Mewakili paket file terkompresi dalam format arsip zip. |
| DisposeAsyncCore() |
Mewakili paket file terkompresi dalam format arsip zip. |
| Equals(Object) |
Menentukan apakah objek yang ditentukan sama dengan objek saat ini. (Diperoleh dari Object) |
| GetEntry(String) |
Mengambil pembungkus untuk entri yang ditentukan dalam arsip zip. |
| GetHashCode() |
Berfungsi sebagai fungsi hash default. (Diperoleh dari Object) |
| GetType() |
Mendapatkan Type instans saat ini. (Diperoleh dari Object) |
| MemberwiseClone() |
Membuat salinan dangkal dari Objectsaat ini. (Diperoleh dari Object) |
| ToString() |
Mengembalikan string yang mewakili objek saat ini. (Diperoleh dari Object) |
Metode Ekstensi
| Nama | Deskripsi |
|---|---|
| ConfigureAwait(IAsyncDisposable, Boolean) |
Mengonfigurasi bagaimana menunggu tugas yang dikembalikan dari asinkron sekali pakai akan dilakukan. |
| CreateEntryFromFile(ZipArchive, String, String, CompressionLevel, ReadOnlySpan<Char>, ZipEncryptionMethod) |
Mewakili paket file terkompresi dalam format arsip zip. |
| CreateEntryFromFile(ZipArchive, String, String, CompressionLevel) |
Mengarsipkan file dengan mengompresinya menggunakan tingkat kompresi yang ditentukan dan menambahkannya ke arsip zip. |
| CreateEntryFromFile(ZipArchive, String, String, ReadOnlySpan<Char>, ZipEncryptionMethod) |
Mewakili paket file terkompresi dalam format arsip zip. |
| CreateEntryFromFile(ZipArchive, String, String) |
Mengarsipkan file dengan mengompresinya dan menambahkannya ke arsip zip. |
| CreateEntryFromFileAsync(ZipArchive, String, String, CancellationToken) |
Secara asinkron menambahkan file dari sistem file ke arsip dengan nama entri yang ditentukan. |
| CreateEntryFromFileAsync(ZipArchive, String, String, CompressionLevel, CancellationToken) |
Secara asinkron menambahkan file dari sistem file ke arsip dengan nama entri yang ditentukan. |
| CreateEntryFromFileAsync(ZipArchive, String, String, CompressionLevel, ReadOnlyMemory<Char>, ZipEncryptionMethod, CancellationToken) |
Mewakili paket file terkompresi dalam format arsip zip. |
| CreateEntryFromFileAsync(ZipArchive, String, String, ReadOnlyMemory<Char>, ZipEncryptionMethod, CancellationToken) |
Mewakili paket file terkompresi dalam format arsip zip. |
| ExtractToDirectory(ZipArchive, String, Boolean) |
Mengekstrak semua file dalam arsip ke direktori pada sistem file. |
| ExtractToDirectory(ZipArchive, String, ZipExtractionOptions) |
Mewakili paket file terkompresi dalam format arsip zip. |
| ExtractToDirectory(ZipArchive, String) |
Mengekstrak semua file dalam arsip zip ke direktori pada sistem file. |
| ExtractToDirectoryAsync(ZipArchive, String, Boolean, CancellationToken) |
Mengekstrak semua file dalam arsip ke direktori pada sistem file. Direktori yang ditentukan mungkin sudah ada. |
| ExtractToDirectoryAsync(ZipArchive, String, CancellationToken) |
Secara asinkron mengekstrak semua file dalam arsip ke direktori pada sistem file. Direktori yang ditentukan sudah bisa ada. |
| ExtractToDirectoryAsync(ZipArchive, String, ZipExtractionOptions, CancellationToken) |
Mewakili paket file terkompresi dalam format arsip zip. |