ZipFileExtensions.ExtractToFile Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Извлекает запись в ZIP-архиве в файл.
Перегрузки
ExtractToFile(ZipArchiveEntry, String) |
Извлекает запись в ZIP-архиве в файл. |
ExtractToFile(ZipArchiveEntry, String, Boolean) |
Извлекает запись из ZIP-архива в файл и при необходимости перезаписывает существующий файл с тем же именем. |
ExtractToFile(ZipArchiveEntry, String)
- Исходный код:
- ZipFileExtensions.ZipArchiveEntry.Extract.cs
- Исходный код:
- ZipFileExtensions.ZipArchiveEntry.Extract.cs
- Исходный код:
- ZipFileExtensions.ZipArchiveEntry.Extract.cs
Извлекает запись в ZIP-архиве в файл.
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)
Параметры
- source
- ZipArchiveEntry
ZIP-архив, из которого извлекается файл.
- destinationFileName
- String
Путь к файлу, создаваемому из содержимого записи. Можно указать относительный или абсолютный путь. Относительный путь интерпретируется относительно текущего рабочего каталога.
Исключения
destinationFileName
представляет собой строку нулевой длины, содержащую только пробелы или один или несколько недопустимых символов, заданных методом InvalidPathChars.
-или-
Параметр destinationFileName
задает каталог.
destinationFileName
имеет значение null
.
Указанный путь, имя файла или оба значения превышают максимальную длину, заданную в системе.
Указан недопустимый путь (например, он ведет на несопоставленный диск).
destinationFileName
уже существует.
-или-
Ошибка ввода/вывода.
-или-
Запись в текущий момент открыта для записи.
-или-
Запись была удалена из архива.
Вызывающий объект не имеет необходимых разрешений на создание нового файла.
Запись в архиве отсутствует либо была повреждена и ее невозможно прочитать.
-или-
Запись была сжата с использованием неподдерживаемого метода сжатия.
ZIP-архив, которому принадлежит эта запись, был удален.
Параметр destinationFileName
задан в недопустимом формате.
-или-
ZIP-архив для этой записи был открыт в режиме Create, который не разрешает получение записей.
Примеры
В следующем примере показано, как выполнить итерацию содержимого ZIP-архивного файла и извлечь файлы с расширением .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
Комментарии
Если целевой файл уже существует, этот метод не перезаписывает его; вызывает исключение IOException . Чтобы перезаписать существующий файл, используйте перегрузку ExtractToFile(ZipArchiveEntry, String, Boolean) метода.
Время последней записи файла — время последнего изменения записи в ZIP-архиве; это значение хранится в свойстве LastWriteTime .
Этот метод нельзя использовать для извлечения каталога; вместо этого используйте ExtractToDirectory метод .
Применяется к
ExtractToFile(ZipArchiveEntry, String, Boolean)
- Исходный код:
- ZipFileExtensions.ZipArchiveEntry.Extract.cs
- Исходный код:
- ZipFileExtensions.ZipArchiveEntry.Extract.cs
- Исходный код:
- ZipFileExtensions.ZipArchiveEntry.Extract.cs
Извлекает запись из ZIP-архива в файл и при необходимости перезаписывает существующий файл с тем же именем.
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)
Параметры
- source
- ZipArchiveEntry
ZIP-архив, из которого извлекается файл.
- destinationFileName
- String
Путь к файлу, создаваемому из содержимого записи. Можно указать относительный или абсолютный путь. Относительный путь интерпретируется относительно текущего рабочего каталога.
- overwrite
- Boolean
Значение true
, чтобы перезаписывался существующий файл с тем же именем, что и файл назначения; в противном случае — значение false
.
Исключения
destinationFileName
представляет собой строку нулевой длины, содержащую только пробелы или один или несколько недопустимых символов, заданных методом InvalidPathChars.
-или-
Параметр destinationFileName
задает каталог.
destinationFileName
имеет значение null
.
Указанный путь, имя файла или оба значения превышают максимальную длину, заданную в системе.
Указан недопустимый путь (например, он ведет на несопоставленный диск).
Имя, заданное в параметре destinationFileName
, уже существует, а параметр overwrite
имеет значение false
.
-или-
Ошибка ввода/вывода.
-или-
Запись в текущий момент открыта для записи.
-или-
Запись была удалена из архива.
Вызывающий объект не имеет необходимых разрешений на создание нового файла.
Запись в архиве отсутствует или была повреждена, и ее невозможно прочитать.
-или-
Запись была сжата с использованием неподдерживаемого метода сжатия.
ZIP-архив, которому принадлежит эта запись, был удален.
Параметр destinationFileName
задан в недопустимом формате.
-или-
ZIP-архив для этой записи был открыт в режиме Create, который не разрешает получение записей.
Примеры
В следующем примере показано, как выполнить итерацию содержимого ZIP-архивного файла и извлечь файлы с расширением .txt. Он перезаписывает существующий файл с таким же именем в целевой папке. Чтобы выполнить компиляцию этого примера кода, необходимо ссылаться на сборки System.IO.Compression
и System.IO.Compression.FileSystem
в проекте.
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
Комментарии
Время последней записи файла — время последнего изменения записи в ZIP-архиве; это значение хранится в свойстве LastWriteTime .
Этот метод нельзя использовать для извлечения каталога; вместо этого используйте ExtractToDirectory метод .