Bagikan melalui


ZipFileExtensions.ExtractToFile Metode

Definisi

Mengekstrak entri dalam arsip zip ke file.

Overload

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.

ExtractToFile(ZipArchiveEntry, String)

Sumber:
ZipFileExtensions.ZipArchiveEntry.Extract.cs
Sumber:
ZipFileExtensions.ZipArchiveEntry.Extract.cs
Sumber:
ZipFileExtensions.ZipArchiveEntry.Extract.cs

Mengekstrak entri dalam arsip zip ke file.

public:
[System::Runtime::CompilerServices::Extension]
 static void ExtractToFile(System::IO::Compression::ZipArchiveEntry ^ source, System::String ^ destinationFileName);
public static void ExtractToFile (this System.IO.Compression.ZipArchiveEntry source, string destinationFileName);
static member ExtractToFile : System.IO.Compression.ZipArchiveEntry * string -> unit
<Extension()>
Public Sub ExtractToFile (source As ZipArchiveEntry, destinationFileName As String)

Parameter

source
ZipArchiveEntry

Entri arsip zip untuk mengekstrak file.

destinationFileName
String

Jalur file yang akan dibuat dari isi entri. Anda dapat menentukan jalur relatif atau absolut. Jalur relatif ditafsirkan relatif terhadap direktori kerja saat ini.

Pengecualian

destinationFileName adalah string panjang nol, hanya berisi spasi kosong, atau berisi satu atau beberapa karakter yang tidak valid seperti yang didefinisikan oleh InvalidPathChars.

-atau-

destinationFileName menentukan direktori.

destinationFileNameadalah null.

Jalur yang ditentukan, nama file, atau keduanya melebihi panjang maksimum yang ditentukan sistem.

Jalur yang ditentukan tidak valid (misalnya, jalur tersebut berada pada drive yang tidak dipetakan).

destinationFileName sudah ada.

-atau-

Terjadi kesalahan I/O.

-atau-

Entri saat ini terbuka untuk penulisan.

-atau-

Entri telah dihapus dari arsip.

Pemanggil tidak memiliki izin yang diperlukan untuk membuat file baru.

Entri hilang dari arsip, atau rusak dan tidak dapat dibaca.

-atau-

Entri telah dikompresi dengan menggunakan metode pemadatan yang tidak didukung.

Arsip zip milik entri ini telah dibuang.

destinationFileName dalam format yang tidak valid.

-atau-

Arsip zip untuk entri ini dibuka dalam Create mode , yang tidak mengizinkan pengambilan entri.

Contoh

Contoh berikut menunjukkan cara melakukan iterasi melalui konten file 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

Keterangan

Jika file tujuan sudah ada, metode ini tidak menimpanya; itu melemparkan IOException pengecualian. Untuk menimpa file yang ada, gunakan ExtractToFile(ZipArchiveEntry, String, Boolean) metode kelebihan beban sebagai gantinya.

Waktu penulisan terakhir file diatur ke terakhir kali entri dalam arsip zip diubah; nilai ini disimpan dalam LastWriteTime properti .

Anda tidak dapat menggunakan metode ini untuk mengekstrak direktori; gunakan metode sebagai gantinya ExtractToDirectory .

Berlaku untuk

ExtractToFile(ZipArchiveEntry, String, Boolean)

Sumber:
ZipFileExtensions.ZipArchiveEntry.Extract.cs
Sumber:
ZipFileExtensions.ZipArchiveEntry.Extract.cs
Sumber:
ZipFileExtensions.ZipArchiveEntry.Extract.cs

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

public:
[System::Runtime::CompilerServices::Extension]
 static void ExtractToFile(System::IO::Compression::ZipArchiveEntry ^ source, System::String ^ destinationFileName, bool overwrite);
public static void ExtractToFile (this System.IO.Compression.ZipArchiveEntry source, string destinationFileName, bool overwrite);
static member ExtractToFile : System.IO.Compression.ZipArchiveEntry * string * bool -> unit
<Extension()>
Public Sub ExtractToFile (source As ZipArchiveEntry, destinationFileName As String, overwrite As Boolean)

Parameter

source
ZipArchiveEntry

Entri arsip zip untuk mengekstrak file.

destinationFileName
String

Jalur file yang akan dibuat dari isi entri. Anda dapat menentukan jalur relatif atau absolut. Jalur relatif ditafsirkan relatif terhadap direktori kerja saat ini.

overwrite
Boolean

true untuk menimpa file yang ada yang memiliki nama yang sama dengan file tujuan; jika tidak, false.

Pengecualian

destinationFileName adalah string panjang nol, hanya berisi spasi kosong, atau berisi satu atau beberapa karakter yang tidak valid seperti yang didefinisikan oleh InvalidPathChars.

-atau-

destinationFileName menentukan direktori.

destinationFileNameadalah null.

Jalur yang ditentukan, nama file, atau keduanya melebihi panjang maksimum yang ditentukan sistem.

Jalur yang ditentukan tidak valid (misalnya, jalur tersebut berada pada drive yang tidak dipetakan).

destinationFileName sudah ada dan overwrite adalah false.

-atau-

Terjadi kesalahan I/O.

-atau-

Entri saat ini terbuka untuk penulisan.

-atau-

Entri telah dihapus dari arsip.

Pemanggil tidak memiliki izin yang diperlukan untuk membuat file baru.

Entri hilang dari arsip atau rusak dan tidak dapat dibaca.

-atau-

Entri telah dikompresi dengan menggunakan metode pemadatan yang tidak didukung.

Arsip zip milik entri ini telah dibuang.

destinationFileName dalam format yang tidak valid.

-atau-

Arsip zip untuk entri ini dibuka dalam Create mode , yang tidak mengizinkan pengambilan entri.

Contoh

Contoh berikut menunjukkan cara melakukan iterasi melalui konten file arsip zip, dan mengekstrak file yang memiliki ekstensi .txt. Ini menimpa file yang ada yang memiliki nama yang sama di folder tujuan. Untuk mengkompilasi contoh kode ini, Anda harus mereferensikan System.IO.Compression rakitan dan System.IO.Compression.FileSystem dalam proyek Anda.

using System;
using System.IO;
using System.IO.Compression;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string zipPath = @"c:\example\start.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))
                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, true);
                    }
                }
            }
        }
    }
}
Imports System.IO
Imports System.IO.Compression

Module Module1

    Sub Main()
        Dim zipPath As String = "c:\example\start.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) 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, true)
                    End If

                End If
            Next
        End Using
    End Sub

End Module

Keterangan

Waktu penulisan terakhir file diatur ke terakhir kali entri dalam arsip zip diubah; nilai ini disimpan dalam LastWriteTime properti .

Anda tidak dapat menggunakan metode ini untuk mengekstrak direktori; gunakan metode sebagai gantinya ExtractToDirectory .

Berlaku untuk