ZipFileExtensions.ExtractToFile Metode
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.
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)
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.
destinationFileName
adalah 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)
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.
destinationFileName
adalah 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 .