ZipFile.OpenRead(String) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Открывает для чтения ZIP-архив по указанному пути.
public:
static System::IO::Compression::ZipArchive ^ OpenRead(System::String ^ archiveFileName);
public static System.IO.Compression.ZipArchive OpenRead (string archiveFileName);
static member OpenRead : string -> System.IO.Compression.ZipArchive
Public Shared Function OpenRead (archiveFileName As String) As ZipArchive
Параметры
- archiveFileName
- String
Путь к открываемому архиву, заданный как относительный или абсолютный путь. Относительный путь интерпретируется относительно текущего рабочего каталога.
Возвращаемое значение
Открытый ZIP-архив.
Исключения
archiveFileName
имеет значение Empty, содержит только пробел или по крайней мере один недопустимый символ.
archiveFileName
имеет значение null
.
В archiveFileName
длина указанного пути, имени файла или обоих параметров превышает установленное в системе максимальное значение.
Параметр archiveFileName
недопустим или не существует (например, он соответствует неподключенному диску).
Не удалось открыть archiveFileName
.
-или-
При открытии файла произошла неуказанная ошибка ввода-вывода.
Параметр archiveFileName
задает каталог.
-или-
У вызывающего оператора отсутствует разрешение на доступ к файлу, указанному в параметре archiveFileName
.
Файл, заданный в archiveFileName
, не найден.
archiveFileName
содержит недопустимый формат.
archiveFileName
не может интерпретироваться как ZIP-архив.
Примеры
В следующем примере показано, как открыть ZIP-архив для чтения.
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);
}
}
}
}
}
open System
open System.IO;
open System.IO.Compression;
[<EntryPoint>]
let main _ =
let zipPath = @".\result.zip"
printfn "Provide path where to extract the zip file:"
let extractPath = stdin.ReadLine();
// Normalizes the path.
let mutable 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) |> not then
extractPath <- extractPath + string Path.DirectorySeparatorChar
use archive = ZipFile.OpenRead zipPath
for entry in archive.Entries do
if entry.FullName.EndsWith(".txt", StringComparison.OrdinalIgnoreCase) then
// Gets the full path to ensure that relative segments are removed.
let 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) then
entry.ExtractToFile destinationPath
0
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
Комментарии
Этот метод эквивалентен вызову Open метода и присвоению параметру mode
значения Read. Архив открывается с FileMode.Open параметром в качестве значения режима файла. Если архив не существует, FileNotFoundException создается исключение.