ZipFile.Open 方法

定义

以指定的模式打开指定路径上的 zip 归档。

重载

Open(String, ZipArchiveMode, Encoding)

在指定的模式中用指定的项名称汉字解码打开指定路径的 zip 存档。

Open(String, ZipArchiveMode)

以指定的模式打开指定路径上的 zip 归档。

Open(String, ZipArchiveMode, Encoding)

Source:
ZipFile.Create.cs
Source:
ZipFile.Create.cs
Source:
ZipFile.Create.cs

在指定的模式中用指定的项名称汉字解码打开指定路径的 zip 存档。

C#
public static System.IO.Compression.ZipArchive Open (string archiveFileName, System.IO.Compression.ZipArchiveMode mode, System.Text.Encoding entryNameEncoding);
C#
public static System.IO.Compression.ZipArchive Open (string archiveFileName, System.IO.Compression.ZipArchiveMode mode, System.Text.Encoding? entryNameEncoding);

参数

archiveFileName
String

要打开的存档的路径,指定为相对路径或绝对路径。 相对路径被解释为相对于当前工作目录。

mode
ZipArchiveMode

一个枚举值指定在开放的存档项的操作。

entryNameEncoding
Encoding

在存档中读取或写入项名时使用的编码。 仅当需要针对具有不支持条目名称的 UTF-8 编码的 zip 归档工具和库的互操作性进行编码时,为此参数指定值。

返回

打开的 zip 存档。

例外

archiveFileNameEmpty,仅包含空格,或者包含至少一个无效字符。

- 或 -

entryNameEncoding 设置为不同于 UTF-8 的 Unicode 编码。

archiveFileNamenull

archiveFileName 内,指定的路径、文件名或者两者都超出了系统定义的最大长度。

archiveFileName 无效或不存在(例如,在未映射的驱动器上)。

未能打开 archiveFileName

- 或 -

mode 设置为 Create,但在 archiveFileName 中指定的文件已存在。

- 或 -

打开文件时发生未指定的 I/O 错误。

archiveFileName 指定目录。

- 或 -

调用方没有访问在 archiveFileName 中指定的文件的所需权限。

mode 指定了一个无效值。

mode 设置为 Read,但在 archiveFileName 中指定的文件未找到。

archiveFileName 包含无效格式。

archiveFileName 无法解释为 zip 存档文件。

- 或 -

modeUpdate,但项已丢失或已损坏,因此无法读取。

- 或 -

modeUpdate,但项太大,无法装入内存。

注解

将 参数设置为 modeRead时,会以 FileMode.Open 作为文件模式值打开存档。 如果存档不存在, FileNotFoundException 则会引发异常。 将 mode 参数设置为 Read 等效于调用 OpenRead 方法。

将 参数设置为 modeCreate时,会以 FileMode.CreateNew 作为文件模式值打开存档。 如果存档已存在, IOException 则会引发 。

将 参数设置为 modeUpdate时,会以 FileMode.OpenOrCreate 作为文件模式值打开存档。 如果存档存在,则会打开它。 可以修改现有条目并创建新条目。 如果存档不存在,则会创建一个新的存档;但是,在 模式下 Update 创建 zip 存档不如在 模式下 Create 创建它的效率。

打开 zip 存档文件进行读取并 entryNameEncoding 设置为 null时,将根据以下规则解码条目名称:

  • 如果未设置本地文件头) 的常规用途位标志中 (语言编码标志,则使用当前系统默认代码页来解码条目名称。

  • 设置语言编码标志后,使用 UTF-8 解码条目名称。

打开 zip 存档文件进行读取并 entryNameEncoding 设置为 以外的 null值时,将根据以下规则对条目名称进行解码:

  • 如果未设置语言编码标志,则使用指定的 entryNameEncoding 来解码条目名称。

  • 设置语言编码标志后,使用 UTF-8 解码条目名称。

当写入存档文件并将其 entryNameEncoding 设置为 null时,将根据以下规则对条目名称进行编码:

  • 对于包含 ASCII 范围之外的字符的条目名称,设置语言编码标志,并使用 UTF-8 对条目名称进行编码。

  • 对于仅包含 ASCII 字符的条目名称,未设置语言编码标志,并且使用当前系统默认代码页对条目名称进行编码。

当你写入存档文件并 entryNameEncoding 设置为 以外的 null值时, entryNameEncoding 指定的 用于将条目名称编码为字节。 仅当指定的编码 (为 UTF-8 编码时,才会设置本地文件头) 的常规用途位标志中的语言编码标志。

适用于

.NET 9 和其他版本
产品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0

Open(String, ZipArchiveMode)

Source:
ZipFile.Create.cs
Source:
ZipFile.Create.cs
Source:
ZipFile.Create.cs

以指定的模式打开指定路径上的 zip 归档。

C#
public static System.IO.Compression.ZipArchive Open (string archiveFileName, System.IO.Compression.ZipArchiveMode mode);

参数

archiveFileName
String

要打开的存档的路径,指定为相对路径或绝对路径。 相对路径被解释为相对于当前工作目录。

mode
ZipArchiveMode

一个枚举值指定在开放的存档项的操作。

返回

打开的 zip 存档。

例外

archiveFileNameEmpty,仅包含空格,或者包含至少一个无效字符。

archiveFileNamenull

archiveFileName 内,指定的路径、文件名或者两者都超出了系统定义的最大长度。

archiveFileName 无效或不存在(例如,在未映射的驱动器上)。

未能打开 archiveFileName

- 或 -

mode 设置为 Create,但在 archiveFileName 中指定的文件已存在。

- 或 -

打开文件时发生未指定的 I/O 错误。

archiveFileName 指定目录。

- 或 -

调用方没有访问在 archiveFileName 中指定的文件的所需权限。

mode 指定了一个无效值。

mode 设置为 Read,但在 archiveFileName 中指定的文件未找到。

archiveFileName 包含无效格式。

archiveFileName 无法解释为 zip 存档文件。

- 或 -

modeUpdate,但项已丢失或已损坏,因此无法读取。

- 或 -

modeUpdate,但项太大,无法装入内存。

示例

以下示例演示如何在更新模式下打开 zip 存档并将条目添加到存档。

C#
using System;
using System.IO;
using System.IO.Compression;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            string zipPath = @"c:\users\exampleuser\start.zip";
            string extractPath = @"c:\users\exampleuser\extract";
            string newFile = @"c:\users\exampleuser\NewFile.txt";

            using (ZipArchive archive = ZipFile.Open(zipPath, ZipArchiveMode.Update))
            {
                archive.CreateEntryFromFile(newFile, "NewEntry.txt");
                archive.ExtractToDirectory(extractPath);
            }
        }
    }
}

注解

将 参数设置为 modeRead时,会使用 OpenFileMode 枚举中的 作为文件模式值打开存档。 如果存档不存在, FileNotFoundException 则会引发异常。 将 mode 参数设置为 Read 等效于调用 OpenRead 方法。

将 参数设置为 modeCreate时,会以 FileMode.CreateNew 作为文件模式值打开存档。 如果存档已存在, IOException 则会引发 。

将 参数设置为 modeUpdate时,会以 FileMode.OpenOrCreate 作为文件模式值打开存档。 如果存档存在,则会打开它。 可以修改现有条目并创建新条目。 如果存档不存在,则会创建一个新的存档;但是,在 模式下 Update 创建 zip 存档不如在 模式下 Create 创建它的效率。

适用于

.NET 9 和其他版本
产品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0