Share via


ZipFileExtensions Kelas

Definisi

Menyediakan metode ekstensi untuk ZipArchive kelas dan ZipArchiveEntry .

public ref class ZipFileExtensions abstract sealed
public static class ZipFileExtensions
type ZipFileExtensions = class
Public Module ZipFileExtensions
Warisan
ZipFileExtensions

Keterangan

Kelas ZipFileExtensions hanya berisi metode statis yang memperluas ZipArchive kelas dan ZipArchiveEntry . Anda tidak membuat instans kelas; sebagai gantinya ZipFileExtensions , Anda menggunakan metode ini dari instans ZipArchive atau ZipArchiveEntry.

Untuk menggunakan metode ekstensi, Anda harus mereferensikan assembly System.IO.Compression.FileSystem dalam proyek Anda. Rakitan System.IO.Compression.FileSystem tidak tersedia di aplikasi Windows 8.x Store. Oleh karena itu, ZipFileExtensions kelas dan ZipFile (keduanya berada di perakitanSystem.IO.Compression.FileSystem) tidak tersedia di aplikasi Windows 8.x Store. Di aplikasi Windows 8.x Store, Anda bekerja dengan file terkompresi dengan menggunakan metode di ZipArchive, , ZipArchiveEntryDeflateStream, dan GZipStream.

Kelas ZipFileExtensions berisi empat metode yang memperluas ZipArchive:

Kelas ZipFileExtensions berisi dua metode yang memperluas ZipArchiveEntry:

Contoh

Contoh berikut menunjukkan cara membuat entri baru dalam arsip zip dari file yang ada, dan mengekstrak konten arsip ke direktori.

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

Contoh berikut menunjukkan cara melakukan iterasi melalui konten arsip zip dan mengekstrak file yang memiliki ekstensi .txt.

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

Metode

CreateEntryFromFile(ZipArchive, String, String)

Mengarsipkan file dengan mengompresinya dan menambahkannya ke arsip zip.

CreateEntryFromFile(ZipArchive, String, String, CompressionLevel)

Mengarsipkan file dengan mengompresinya menggunakan tingkat kompresi yang ditentukan dan menambahkannya ke arsip zip.

ExtractToDirectory(ZipArchive, String)

Mengekstrak semua file dalam arsip zip ke direktori pada sistem file.

ExtractToDirectory(ZipArchive, String, Boolean)

Mengekstrak semua file dalam arsip ke direktori pada sistem file.

ExtractToFile(ZipArchiveEntry, String)

Mengekstrak entri dalam arsip zip ke file.

ExtractToFile(ZipArchiveEntry, String, Boolean)

Mengekstrak entri dalam arsip zip ke file, dan secara opsional menimpa file yang ada yang memiliki nama yang sama.

Berlaku untuk