ZipFileExtensions.ExtractToFile Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Estrae una voce nell'archivio ZIP in un file.
Overload
ExtractToFile(ZipArchiveEntry, String) |
Estrae una voce nell'archivio ZIP in un file. |
ExtractToFile(ZipArchiveEntry, String, Boolean) |
Estrae una voce nell'archivio ZIP in un file e sovrascrive facoltativamente un file esistente con lo stesso nome. |
ExtractToFile(ZipArchiveEntry, String)
Estrae una voce nell'archivio ZIP in un 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)
Parametri
- source
- ZipArchiveEntry
Voce dell'archivio ZIP da cui estrarre un file.
- destinationFileName
- String
Percorso del file da creare dal contenuto della voce. È possibile specificare un percorso relativo o assoluto. Un percorso relativo è interpretato rispetto alla directory di lavoro corrente.
Eccezioni
destinationFileName
è una stringa di lunghezza zero, contiene solo spazi vuoti o contiene uno o più caratteri non validi definiti da InvalidPathChars.
-oppure-
destinationFileName
specifica una directory.
destinationFileName
è null
.
Il percorso specificato, il nome file o entrambi superano la lunghezza massima definita dal sistema.
Il percorso specificato non è valido, ad esempio si trova in un'unità non mappata.
destinationFileName
esiste già.
-oppure-
Si è verificato un errore di I/O.
-oppure-
La voce è attualmente aperta per la scrittura.
-oppure-
La voce è stata eliminata dall'archivio.
Il chiamante non ha le autorizzazioni necessarie per creare il nuovo file.
La voce non è presente nell'archivio o è danneggiata e non può essere letta.
-oppure-
La voce è stata compressa con un metodo di compressione non supportato.
L'archivio ZIP a cui appartiene questa voce è stato eliminato.
Il formato di destinationFileName
non è valido.
-oppure-
L'archivio ZIP per questa voce è stato aperto nella modalità Create che non consente il recupero delle voci.
Esempio
Nell'esempio seguente viene illustrato come eseguire l'iterazione del contenuto di un file di archivio zip ed estrarre file con estensione .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
Commenti
Se il file di destinazione esiste già, questo metodo non lo sovrascrive; genera un'eccezione IOException . Per sovrascrivere un file esistente, usare invece l'overload del ExtractToFile(ZipArchiveEntry, String, Boolean) metodo.
L'ultima ora di scrittura del file viene impostata sull'ultima volta che la voce nell'archivio zip è stata modificata; questo valore viene archiviato nella LastWriteTime proprietà .
Non è possibile usare questo metodo per estrarre una directory; usare invece il ExtractToDirectory metodo.
Si applica a
ExtractToFile(ZipArchiveEntry, String, Boolean)
Estrae una voce nell'archivio ZIP in un file e sovrascrive facoltativamente un file esistente con lo stesso nome.
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)
Parametri
- source
- ZipArchiveEntry
Voce dell'archivio ZIP da cui estrarre un file.
- destinationFileName
- String
Percorso del file da creare dal contenuto della voce. È possibile specificare un percorso relativo o assoluto. Un percorso relativo è interpretato rispetto alla directory di lavoro corrente.
- overwrite
- Boolean
true
per sovrascrivere un file esistente con lo stesso nome del file di destinazione. In caso contrario, false
.
Eccezioni
destinationFileName
è una stringa di lunghezza zero, contiene solo spazi vuoti o contiene uno o più caratteri non validi definiti da InvalidPathChars.
-oppure-
destinationFileName
specifica una directory.
destinationFileName
è null
.
Il percorso specificato, il nome file o entrambi superano la lunghezza massima definita dal sistema.
Il percorso specificato non è valido, ad esempio si trova in un'unità non mappata.
destinationFileName
esiste già e overwrite
è false
.
-oppure-
Si è verificato un errore di I/O.
-oppure-
La voce è attualmente aperta per la scrittura.
-oppure-
La voce è stata eliminata dall'archivio.
Il chiamante non ha le autorizzazioni necessarie per creare il nuovo file.
La voce risulta mancante dall'archivio o è danneggiata e non può essere letta.
-oppure-
La voce è stata compressa con un metodo di compressione non supportato.
L'archivio ZIP a cui appartiene questa voce è stato eliminato.
Il formato di destinationFileName
non è valido.
-oppure-
L'archivio ZIP per questa voce è stato aperto nella modalità Create che non consente il recupero delle voci.
Esempio
Nell'esempio seguente viene illustrato come eseguire l'iterazione del contenuto di un file di archivio zip ed estrarre file con estensione .txt. Sovrascrive un file esistente con lo stesso nome nella cartella di destinazione. Per compilare questo esempio di codice, è necessario fare riferimento agli System.IO.Compression
assembly e System.IO.Compression.FileSystem
nel progetto.
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
Commenti
L'ultima ora di scrittura del file viene impostata sull'ultima volta che la voce nell'archivio zip è stata modificata; questo valore viene archiviato nella LastWriteTime proprietà .
Non è possibile usare questo metodo per estrarre una directory; usare invece il ExtractToDirectory metodo.