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
- Исходный код:
- 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
- Исходный код:
- 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.CompressionSystem.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 вместо этого используйте метод.