ZipFile.ExtractToDirectory 方法

定义

将指定 zip 存档中的所有文件都解压缩到文件系统的一个目录下。

重载

ExtractToDirectory(String, String, Encoding, Boolean)

将指定存档中的所有文件都解压缩到文件系统的某目录下。

ExtractToDirectory(Stream, String, Encoding, Boolean)

从指定流中存储的 zip 存档中提取所有文件,并将其置于文件系统上的指定目标目录中,对条目名称使用指定的字符编码,并选择性地允许选择是否应覆盖目标目录中的文件。

ExtractToDirectory(String, String, Encoding)

将指定 zip 存档中的所有文件解压缩到文件系统的一目录下,并使用项名称的指定字符编码。

ExtractToDirectory(String, String, Boolean)

将指定存档中的所有文件都解压缩到文件系统的某目录下。

ExtractToDirectory(Stream, String, Boolean)

从指定流中存储的 zip 存档中提取所有文件,并将其放置在文件系统的指定目标目录中,并选择性地允许选择是否应覆盖目标目录中的文件。

ExtractToDirectory(String, String)

将指定 zip 存档中的所有文件都解压缩到文件系统的一个目录下。

ExtractToDirectory(Stream, String)

从指定流中存储的 zip 存档中提取所有文件,并将其放置在文件系统的指定目标目录中。

ExtractToDirectory(Stream, String, Encoding)

从指定流中存储的 zip 存档中提取所有文件,并将其放置在文件系统的指定目标目录中,并使用指定的字符编码作为条目名称。

ExtractToDirectory(String, String, Encoding, Boolean)

Source:
ZipFile.Extract.cs
Source:
ZipFile.Extract.cs
Source:
ZipFile.Extract.cs

将指定存档中的所有文件都解压缩到文件系统的某目录下。

public static void ExtractToDirectory (string sourceArchiveFileName, string destinationDirectoryName, System.Text.Encoding? entryNameEncoding, bool overwriteFiles);
public static void ExtractToDirectory (string sourceArchiveFileName, string destinationDirectoryName, System.Text.Encoding entryNameEncoding, bool overwriteFiles);

参数

sourceArchiveFileName
String

文件系统上指向要解压缩的存档的路径。

destinationDirectoryName
String

文件系统上指向目标目录的路径。

entryNameEncoding
Encoding

在此 ZipArchive 中读取项名时使用的编码。

overwriteFiles
Boolean

要覆盖文件,则为 true;否则为 false

例外

sourceArchiveFileNamedestinationDirectoryName 是一个长度为零的字符串,仅包含空格,或包含一个或多个由 InvalidPathChars 定义的无效字符。

- 或 -

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

sourceArchiveFileNamedestinationDirectoryNamenull

sourceArchiveFileNamedestinationDirectoryName 指定的路径和/或文件名超出了系统定义的最大长度。

sourceArchiveFileNamedestinationDirectoryName 指定的路径无效(例如,它位于未映射的驱动器上)。

overwriteFilesfalse ,并且要提取的存档项与 中 destinationDirectoryName已存在的文件同名。

- 或 -

发生了 I/O 错误。

- 或 -

ZipArchiveEntry 的名称的长度为零,仅包含空格,或包含一个或多个由 InvalidPathChars 定义的无效字符。

- 或 -

提取 ZipArchiveEntry 将导致文件目标位于目标目录之外(例如,由于父目录访问器)。

- 或 -

ZipArchiveEntry 与一个已从同一存档中解压缩的项同名。

调用方没有所要求的权限。

sourceArchiveFileNamedestinationDirectoryName 的格式无效。

未找到 sourceArchiveFileName

sourceArchiveFileName 指定的存档不是有效 ZipArchive

- 或 -

存档项未找到或已损坏。

- 或 -

存档项已通过使用一种不受支持的压缩方法压缩。

注解

如果在提取存档时出错,存档将保持部分提取状态。

将提取每个条目,以便提取的文件具有与存档项相同的相对路径 destinationDirectoryName

sourceArchiveFileNamedestinationDirectoryName 参数接受相对路径和绝对路径。 相对路径被解释为相对于当前工作目录。

如果要存档的文件的上次修改时间无效,则将使用 1980 年 1 月 1 日午夜 (zip 时间戳格式表示的第一个日期和时间,) 。

适用于

.NET 9 和其他版本
产品 版本
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Standard 2.1

ExtractToDirectory(Stream, String, Encoding, Boolean)

Source:
ZipFile.Extract.cs
Source:
ZipFile.Extract.cs

从指定流中存储的 zip 存档中提取所有文件,并将其置于文件系统上的指定目标目录中,对条目名称使用指定的字符编码,并选择性地允许选择是否应覆盖目标目录中的文件。

public static void ExtractToDirectory (System.IO.Stream source, string destinationDirectoryName, System.Text.Encoding? entryNameEncoding, bool overwriteFiles);

参数

source
Stream

要从中提取 zip 存档的流。

destinationDirectoryName
String

到放置解压缩文件的目录的路径,指定为相对路径或绝对路径。 相对路径被解释为相对于当前工作目录。

entryNameEncoding
Encoding

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

overwriteFiles
Boolean

要覆盖文件,则为 true;否则为 false

例外

destinationDirectoryName> 为 Empty,仅包含空格,或至少包含一个无效字符。

- 或 -

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

destinationDirectoryNamesourcenull

中的 destinationDirectoryName 指定路径超出了系统定义的最大长度。

指定的路径无效(例如,它位于未映射的驱动器上)。

一个在存档中的输入名称是 Empty,仅包含空白或包含至少一个无效字符。

- 或 -

提取存档条目将生成在 destinationDirectoryName 指定的目录之外的一个文件。 (例如,如果该输入名称包括父目录访问器,则这可能发生。)

- 或 -

overwriteFilesfalse ,并且要提取的存档项与已提取或存在于 中的 destinationDirectoryName条目同名。

调用方不具有访问存档或目标目录的所需权限。

destinationDirectoryName 包含无效格式。

流中包含的 source 存档不是有效的 zip 存档。

- 或 -

存档项未找到或已损坏。

- 或 -

使用了一种不支持的压缩方法压缩存档条目。

注解

此方法创建指定的目录和所有子目录。 目标目录不能已存在。 在提取之前,会引发与验证 参数中包含的 source 或 zip 存档中的文件的路径destinationDirectoryName相关的异常。 否则,如果在提取过程中发生错误,存档将保持部分提取状态。 每个提取的文件都具有指定的 destinationDirectoryName 目录的相对路径,因为它的源条目与存档的根目录具有相同的路径。 如果要存档的文件的上次修改时间无效,则将使用 1980 年 1 月 1 日午夜 (zip 时间戳格式表示的第一个日期和时间,) 。

适用于

.NET 9 和 .NET 8
产品 版本
.NET 8, 9

ExtractToDirectory(String, String, Encoding)

Source:
ZipFile.Extract.cs
Source:
ZipFile.Extract.cs
Source:
ZipFile.Extract.cs

将指定 zip 存档中的所有文件解压缩到文件系统的一目录下,并使用项名称的指定字符编码。

public static void ExtractToDirectory (string sourceArchiveFileName, string destinationDirectoryName, System.Text.Encoding entryNameEncoding);
public static void ExtractToDirectory (string sourceArchiveFileName, string destinationDirectoryName, System.Text.Encoding? entryNameEncoding);

参数

sourceArchiveFileName
String

要解压缩存档的路径。

destinationDirectoryName
String

到放置解压缩文件的目录的路径,指定为相对路径或绝对路径。 相对路径被解释为相对于当前工作目录。

entryNameEncoding
Encoding

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

例外

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

- 或 -

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

destinationDirectoryNamesourceArchiveFileNamenull

destinationDirectoryNamesourceArchiveFileName 中的指定路径超过了系统定义的最大长度。

指定的路径无效(例如,它位于未映射的驱动器上)。

一个在存档中的输入名称是 Empty,仅包含空白或包含至少一个无效字符。

- 或 -

提取存档条目将生成在 destinationDirectoryName 指定的目录之外的一个文件。 (例如,如果该输入名称包括父目录访问器,则这可能发生。)

- 或 -

要提取的存档项与已提取或存在于 中的 destinationDirectoryName条目同名。

调用方不具有访问存档或目标目录的所需权限。

destinationDirectoryNamesourceArchiveFileName 包含的格式无效。

未找到 sourceArchiveFileName

sourceArchiveFileName 指定的存档不是有效 zip 存档。

- 或 -

存档项未找到或已损坏。

- 或 -

使用了一种不支持的压缩方法压缩存档条目。

注解

如有必要,此方法会创建指定的目录和所有子目录。 与验证 或 sourceArchiveFileName 参数中的destinationDirectoryName路径相关的异常在提取之前引发。 否则,如果在提取过程中发生错误,存档将保持部分提取状态。 每个提取的文件都具有指定的 destinationDirectoryName 目录的相对路径,因为它的源条目对存档的根目录具有相同的路径。

如果 entryNameEncoding 设置为非 null值,则根据以下规则解码条目名称:

  • 对于未在本地文件头) 的常规用途位标志中 (语言编码标志的条目名称,将使用指定的编码对条目名称进行解码。
  • 对于设置了语言编码标志的条目,将使用 UTF-8 解码条目名称。

如果 entryNameEncoding 设置为 null,则根据以下规则对条目名称进行解码:

  • 对于未设置本地文件头) 的常规用途位标志中 (语言编码标志的条目,将使用当前系统默认代码页对条目名称进行解码。
  • 对于设置了语言编码标志的条目,将使用 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

ExtractToDirectory(String, String, Boolean)

Source:
ZipFile.Extract.cs
Source:
ZipFile.Extract.cs
Source:
ZipFile.Extract.cs

将指定存档中的所有文件都解压缩到文件系统的某目录下。

public static void ExtractToDirectory (string sourceArchiveFileName, string destinationDirectoryName, bool overwriteFiles);

参数

sourceArchiveFileName
String

文件系统上指向要解压缩的存档的路径。

destinationDirectoryName
String

文件系统上指向目标目录的路径。

overwriteFiles
Boolean

要覆盖文件,则为 true;否则为 false

例外

sourceArchiveFileNamedestinationDirectoryName 是一个长度为零的字符串,仅包含空格,或包含一个或多个由 InvalidPathChars 定义的无效字符。

sourceArchiveFileNamedestinationDirectoryNamenull

sourceArchiveFileNamedestinationDirectoryName 指定的路径和/或文件名超出了系统定义的最大长度。

sourceArchiveFileNamedestinationDirectoryName 指定的路径无效(例如,它位于未映射的驱动器上)。

overwriteFilesfalsedestinationDirectoryName 已包含与要提取的文件同名的文件。

- 或 -

发生了 I/O 错误。

- 或 -

ZipArchiveEntry 的名称的长度为零,仅包含空格,或包含一个或多个由 InvalidPathChars 定义的无效字符。

- 或 -

提取 ZipArchiveEntry 将导致文件目标位于目标目录之外(例如,由于父目录访问器)。

- 或 -

ZipArchiveEntry 已提取的同一存档中的条目同名。

调用方没有所要求的权限。

sourceArchiveFileNamedestinationDirectoryName 的格式无效。

未找到 sourceArchiveFileName

sourceArchiveFileName 指定的存档不是有效 ZipArchive

- 或 -

ZipArchiveEntry 未找到或已损坏。

- 或 -

ZipArchiveEntry 已经通过使用一种不被支持的压缩方法压缩。

注解

如果在提取存档时出错,存档将保持部分提取状态。

将提取每个条目,以便提取的文件具有与存档项相同的相对路径 destinationDirectoryName

sourceArchiveFileNamedestinationDirectoryName 参数接受相对路径和绝对路径。 相对路径被解释为相对于当前工作目录。

如果要存档的文件的上次修改时间无效,则将使用 1980 年 1 月 1 日午夜 (zip 时间戳格式表示的第一个日期和时间) 。

适用于

.NET 9 和其他版本
产品 版本
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Standard 2.1

ExtractToDirectory(Stream, String, Boolean)

Source:
ZipFile.Extract.cs
Source:
ZipFile.Extract.cs

从指定流中存储的 zip 存档中提取所有文件,并将其置于文件系统上的指定目标目录中,并选择性地允许选择是否应覆盖目标目录中的文件。

public static void ExtractToDirectory (System.IO.Stream source, string destinationDirectoryName, bool overwriteFiles);

参数

source
Stream

要从中提取 zip 存档的流。

destinationDirectoryName
String

到放置解压缩文件的目录的路径,指定为相对路径或绝对路径。 相对路径被解释为相对于当前工作目录。

overwriteFiles
Boolean

要覆盖文件,则为 true;否则为 false

例外

destinationDirectoryName> 为 Empty,仅包含空格,或至少包含一个无效字符。

destinationDirectoryNamesourcenull

中的 destinationDirectoryName 指定路径超出了系统定义的最大长度。

指定的路径无效(例如,它位于未映射的驱动器上)。

一个在存档中的输入名称是 Empty,仅包含空白或包含至少一个无效字符。

- 或 -

提取存档条目将生成在 destinationDirectoryName 指定的目录之外的一个文件。 (例如,如果该输入名称包括父目录访问器,则这可能发生。)

- 或 -

overwriteFiles 为 , false 并且要提取的存档项与已提取或存在于 中的 destinationDirectoryName条目同名。

调用方不具有访问存档或目标目录的所需权限。

destinationDirectoryName 包含无效格式。

流中包含的 source 存档不是有效的 zip 存档。

- 或 -

存档项未找到或已损坏。

- 或 -

使用了一种不支持的压缩方法压缩存档条目。

注解

此方法创建指定的目录和所有子目录。 目标目录不能已经存在。 在提取之前,会引发与验证 参数中包含的 source 或 zip 存档中的文件的路径destinationDirectoryName相关的异常。 否则,如果在提取过程中发生错误,存档将保持部分提取状态。 每个提取的文件都具有指定的 destinationDirectoryName 目录的相对路径,因为它的源条目对存档的根目录具有相同的路径。 如果要存档的文件的上次修改时间无效,则将使用 1980 年 1 月 1 日午夜 (zip 时间戳格式表示的第一个日期和时间) 。

适用于

.NET 9 和 .NET 8
产品 版本
.NET 8, 9

ExtractToDirectory(String, String)

Source:
ZipFile.Extract.cs
Source:
ZipFile.Extract.cs
Source:
ZipFile.Extract.cs

将指定 zip 存档中的所有文件都解压缩到文件系统的一个目录下。

public static void ExtractToDirectory (string sourceArchiveFileName, string destinationDirectoryName);

参数

sourceArchiveFileName
String

要解压缩存档的路径。

destinationDirectoryName
String

到放置解压缩文件的目录的路径,指定为相对路径或绝对路径。 相对路径被解释为相对于当前工作目录。

例外

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

destinationDirectoryNamesourceArchiveFileNamenull

destinationDirectoryNamesourceArchiveFileName 中的指定路径超过了系统定义的最大长度。

指定的路径无效(例如,它位于未映射的驱动器上)。

一个在存档中的输入名称是 Empty,仅包含空白或包含至少一个无效字符。

- 或 -

提取存档条目将生成在 destinationDirectoryName 指定的目录之外的一个文件。 (例如,如果该输入名称包括父目录访问器,则这可能发生。)

- 或 -

要提取的存档项与已提取或存在于 中的 destinationDirectoryName条目同名。

调用方不具有访问存档或目标目录的所需权限。

destinationDirectoryNamesourceArchiveFileName 包含的格式无效。

未找到 sourceArchiveFileName

sourceArchiveFileName 指定的存档不是有效 zip 存档。

- 或 -

存档项未找到或已损坏。

- 或 -

使用了一种不支持的压缩方法压缩存档条目。

示例

此示例演示如何使用 ZipFile 类创建和提取 zip 存档。 它将文件夹的内容压缩到 zip 存档中,并将该内容提取到新文件夹。 若要使用 ZipFile 类,必须在项目中引用 System.IO.Compression.FileSystem 程序集。

using System;
using System.IO.Compression;

class Program
{
    static void Main(string[] args)
    {
        string startPath = @".\start";
        string zipPath = @".\result.zip";
        string extractPath = @".\extract";

        ZipFile.CreateFromDirectory(startPath, zipPath);

        ZipFile.ExtractToDirectory(zipPath, extractPath);
    }
}

注解

此方法创建指定的目录和所有子目录。 目标目录不能已存在。 与验证 或 sourceArchiveFileName 参数中的destinationDirectoryName路径相关的异常在提取之前引发。 否则,如果在提取过程中发生错误,存档将保持部分提取状态。 每个提取的文件都具有指定的 destinationDirectoryName 目录的相对路径,因为它的源条目与存档的根目录具有相同的路径。

适用于

.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

ExtractToDirectory(Stream, String)

Source:
ZipFile.Extract.cs
Source:
ZipFile.Extract.cs

从指定流中存储的 zip 存档中提取所有文件,并将其放置在文件系统的指定目标目录中。

public static void ExtractToDirectory (System.IO.Stream source, string destinationDirectoryName);

参数

source
Stream

要从中提取 zip 存档的流。

destinationDirectoryName
String

到放置解压缩文件的目录的路径,指定为相对路径或绝对路径。 相对路径被解释为相对于当前工作目录。

例外

destinationDirectoryName> 为 Empty,仅包含空格,或至少包含一个无效字符。

destinationDirectoryNamesourcenull

中的 destinationDirectoryName 指定路径超出了系统定义的最大长度。

指定的路径无效(例如,它位于未映射的驱动器上)。

一个在存档中的输入名称是 Empty,仅包含空白或包含至少一个无效字符。

- 或 -

提取存档条目将生成在 destinationDirectoryName 指定的目录之外的一个文件。 (例如,如果该输入名称包括父目录访问器,则这可能发生。)

- 或 -

要提取的存档项与已提取或存在于 中的 destinationDirectoryName条目同名。

调用方不具有访问存档或目标目录的所需权限。

destinationDirectoryName 包含无效格式。

流中包含的 source 存档不是有效的 zip 存档。

- 或 -

存档项未找到或已损坏。

- 或 -

使用了一种不支持的压缩方法压缩存档条目。

注解

此方法创建指定的目录和所有子目录。 目标目录不能已存在。 在提取之前,会引发与验证 参数中包含的 source 或 zip 存档中的文件的路径destinationDirectoryName相关的异常。 否则,如果在提取过程中发生错误,存档将保持部分提取状态。 每个提取的文件都具有指定的 destinationDirectoryName 目录的相对路径,因为它的源条目与存档的根目录具有相同的路径。 如果要存档的文件的上次修改时间无效,则将使用 1980 年 1 月 1 日午夜 (zip 时间戳格式表示的第一个日期和时间,) 。

适用于

.NET 9 和 .NET 8
产品 版本
.NET 8, 9

ExtractToDirectory(Stream, String, Encoding)

Source:
ZipFile.Extract.cs
Source:
ZipFile.Extract.cs

从指定流中存储的 zip 存档中提取所有文件,并将其放置在文件系统的指定目标目录中,并使用指定的字符编码作为条目名称。

public static void ExtractToDirectory (System.IO.Stream source, string destinationDirectoryName, System.Text.Encoding? entryNameEncoding);

参数

source
Stream

要从中提取 zip 存档的流。

destinationDirectoryName
String

到放置解压缩文件的目录的路径,指定为相对路径或绝对路径。 相对路径被解释为相对于当前工作目录。

entryNameEncoding
Encoding

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

例外

destinationDirectoryName> 为 Empty,仅包含空格,或至少包含一个无效字符。

- 或 -

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

destinationDirectoryNamesourcenull

中的 destinationDirectoryName 指定路径超出了系统定义的最大长度。

指定的路径无效(例如,它位于未映射的驱动器上)。

一个在存档中的输入名称是 Empty,仅包含空白或包含至少一个无效字符。

- 或 -

提取存档条目将生成在 destinationDirectoryName 指定的目录之外的一个文件。 (例如,如果该输入名称包括父目录访问器,则这可能发生。)

- 或 -

要提取的存档项与已提取或存在于 中的 destinationDirectoryName条目同名。

调用方不具有访问存档或目标目录的所需权限。

destinationDirectoryName 包含无效格式。

流中包含的 source 存档不是有效的 zip 存档。

- 或 -

存档项未找到或已损坏。

- 或 -

使用了一种不支持的压缩方法压缩存档条目。

注解

此方法创建指定的目录和所有子目录。 目标目录不能已存在。 在提取之前,会引发与验证 参数中包含的 source 或 zip 存档中的文件的路径destinationDirectoryName相关的异常。 否则,如果在提取过程中发生错误,存档将保持部分提取状态。 每个提取的文件都具有指定的 destinationDirectoryName 目录的相对路径,因为它的源条目与存档的根目录具有相同的路径。 如果要存档的文件的上次修改时间无效,则将使用 1980 年 1 月 1 日午夜 (zip 时间戳格式表示的第一个日期和时间,) 。

适用于

.NET 9 和 .NET 8
产品 版本
.NET 8, 9