ZipFile.CreateFromDirectory 方法

定義

建立包含指定目錄中檔案及目錄的 zip 封存。

多載

CreateFromDirectory(String, Stream)

在指定的資料流程中建立 zip 封存,其中包含指定目錄中的檔案和目錄。

CreateFromDirectory(String, String)

建立包含指定目錄中檔案及目錄的 zip 封存。

CreateFromDirectory(String, Stream, CompressionLevel, Boolean)

在指定的資料流程中建立 zip 封存,其中包含指定目錄中的檔案和目錄、使用指定的壓縮層級,以及選擇性地包含基底目錄。

CreateFromDirectory(String, String, CompressionLevel, Boolean)

建立 zip 封存,這個封存包含指定之目錄中的檔案及目錄,使用指定的壓縮等級,並選擇性包含基底目錄。

CreateFromDirectory(String, Stream, CompressionLevel, Boolean, Encoding)

在指定的資料流程中建立 zip 封存,其中包含指定目錄中的檔案和目錄、針對專案名稱使用指定的壓縮層級和字元編碼,並選擇性地包含基底目錄。

CreateFromDirectory(String, String, CompressionLevel, Boolean, Encoding)

建立 zip 封存,這個封存包含指定之目錄中的檔案及目錄,針對項目名稱使用指定的壓縮等級和字元編碼方式,並選擇性包含基底目錄。

CreateFromDirectory(String, Stream)

在指定的資料流程中建立 zip 封存,其中包含指定目錄中的檔案和目錄。

public:
 static void CreateFromDirectory(System::String ^ sourceDirectoryName, System::IO::Stream ^ destination);
public static void CreateFromDirectory (string sourceDirectoryName, System.IO.Stream destination);
static member CreateFromDirectory : string * System.IO.Stream -> unit
Public Shared Sub CreateFromDirectory (sourceDirectoryName As String, destination As Stream)

參數

sourceDirectoryName
String

要封存的目錄路徑(指定為相對或絕對路徑)。 相對路徑會解譯為與目前的工作目錄相對。

destination
Stream

要儲存 zip 封存的資料流程。

例外狀況

sourceDirectoryNameEmpty、只包含空白字元,或包含至少一個無效字元。

-或-

資料流程 destination 不支援寫入。

sourceDirectoryNamedestinationnull

sourceDirectoryName 指定的路徑中,檔案名或兩者都超過系統定義的最大長度。

sourceDirectoryName 無效或不存在 (例如,位於未對應的磁碟機上)。

無法開啟指定之目錄中的檔案。

-或-

開啟要封存的檔案時發生 I/O 錯誤。

sourceDirectoryName 包含無效的格式。

備註

檔案系統中的目錄結構會保留在封存中。 如果目錄是空的,則會建立空的封存。 這個方法多載不包含封存中的基底目錄,而且不允許您指定壓縮層級。 如果您想要包含基底目錄或指定壓縮層級,請呼叫 CreateFromDirectory(String, Stream, CompressionLevel, Boolean) 方法多載。 如果目錄中的檔案無法新增至封存,封存會保持不完整且無效,而且方法會 IOException 擲回例外狀況。

適用於

CreateFromDirectory(String, String)

建立包含指定目錄中檔案及目錄的 zip 封存。

public:
 static void CreateFromDirectory(System::String ^ sourceDirectoryName, System::String ^ destinationArchiveFileName);
public static void CreateFromDirectory (string sourceDirectoryName, string destinationArchiveFileName);
static member CreateFromDirectory : string * string -> unit
Public Shared Sub CreateFromDirectory (sourceDirectoryName As String, destinationArchiveFileName As String)

參數

sourceDirectoryName
String

要封存的目錄路徑(指定為相對或絕對路徑)。 相對路徑會解譯為與目前的工作目錄相對。

destinationArchiveFileName
String

要建立的封存的路徑(指定為相對或絕對路徑)。 相對路徑會解譯為與目前的工作目錄相對。

例外狀況

sourceDirectoryNamedestinationArchiveFileNameEmpty,只含有空白字元,或者含有至少一個無效字元。

sourceDirectoryNamedestinationArchiveFileNamenull

sourceDirectoryNamedestinationArchiveFileName 中,指定的路徑、檔案名稱或兩者都超過系統定義的最大長度。

sourceDirectoryName 無效或不存在 (例如,位於未對應的磁碟機上)。

destinationArchiveFileName 已經存在。

-或-

無法開啟指定之目錄中的檔案。

-或-

開啟要封存的檔案時發生 I/O 錯誤。

destinationArchiveFileName 會指定目錄。

-或-

呼叫端沒有必要的權限,無法存取 sourceDirectoryName 中指定的目錄或 destinationArchiveFileName 中指定的檔案。

sourceDirectoryNamedestinationArchiveFileName 包含無效的格式。

-或-

Zip 封存不支援寫入。

範例

此範例示範如何使用 類別來建立和解壓縮 ZIP 封存 ZipFile 。 它會將資料夾的內容壓縮成 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);
    }
}
open System.IO.Compression

let startPath = @".\start"
let zipPath = @".\result.zip"
let extractPath = @".\extract"

ZipFile.CreateFromDirectory(startPath, zipPath)

ZipFile.ExtractToDirectory(zipPath, extractPath)
Imports System.IO.Compression

Module Module1

    Sub Main()
        Dim startPath As String = ".\start"
        Dim zipPath As String = ".\result.zip"
        Dim extractPath As String = ".\extract"

        ZipFile.CreateFromDirectory(startPath, zipPath)

        ZipFile.ExtractToDirectory(zipPath, extractPath)
    End Sub

End Module

備註

檔案系統中的目錄結構會保留在封存中。 如果目錄是空的,則會建立空的封存。 這個方法多載不包含封存中的基底目錄,而且不允許您指定壓縮層級。 如果您想要包含基底目錄或指定壓縮層級,請呼叫 CreateFromDirectory(String, String, CompressionLevel, Boolean) 方法多載。

如果封存已經存在, IOException 則會擲回例外狀況。 如果封存中已經存在具有指定名稱的專案,則會使用相同的名稱建立第二個專案。

如果目錄中的檔案無法新增至封存,封存會保持不完整且無效,而且方法會 IOException 擲回例外狀況。

適用於

CreateFromDirectory(String, Stream, CompressionLevel, Boolean)

在指定的資料流程中建立 zip 封存,其中包含指定目錄中的檔案和目錄、使用指定的壓縮層級,以及選擇性地包含基底目錄。

public:
 static void CreateFromDirectory(System::String ^ sourceDirectoryName, System::IO::Stream ^ destination, System::IO::Compression::CompressionLevel compressionLevel, bool includeBaseDirectory);
public static void CreateFromDirectory (string sourceDirectoryName, System.IO.Stream destination, System.IO.Compression.CompressionLevel compressionLevel, bool includeBaseDirectory);
static member CreateFromDirectory : string * System.IO.Stream * System.IO.Compression.CompressionLevel * bool -> unit
Public Shared Sub CreateFromDirectory (sourceDirectoryName As String, destination As Stream, compressionLevel As CompressionLevel, includeBaseDirectory As Boolean)

參數

sourceDirectoryName
String

要封存的目錄路徑(指定為相對或絕對路徑)。 相對路徑會解譯為與目前的工作目錄相對。

destination
Stream

要儲存 zip 封存的資料流程。

compressionLevel
CompressionLevel

其中一個列舉值,指出當建立項目時是否要強調速度或壓縮的效益。

includeBaseDirectory
Boolean

true 表示從 sourceDirectoryName (位於封存根目錄中) 包含目錄名稱,false 表示只包含目錄的內容。

例外狀況

sourceDirectoryNameEmpty、只包含空白字元,或包含至少一個無效字元。

-或-

資料流程 destination 不支援寫入。

sourceDirectoryNamedestinationnull

sourceDirectoryName 指定的路徑中,檔案名或兩者都超過系統定義的最大長度。

sourceDirectoryName 無效或不存在 (例如,位於未對應的磁碟機上)。

無法開啟指定之目錄中的檔案。

-或-

開啟要封存的檔案時發生 I/O 錯誤。

sourceDirectoryName 包含無效的格式。

compressionLevel 不是有效的 CompressionLevel 值。

備註

檔案系統中的目錄結構會保留在封存中。 如果目錄是空的,則會建立空的封存。 使用這個方法多載可指定壓縮層級,以及是否要在封存中包含基底目錄。 如果目錄中的檔案無法新增至封存,封存會保持不完整且無效,而且方法會 IOException 擲回例外狀況。

適用於

CreateFromDirectory(String, String, CompressionLevel, Boolean)

建立 zip 封存,這個封存包含指定之目錄中的檔案及目錄,使用指定的壓縮等級,並選擇性包含基底目錄。

public:
 static void CreateFromDirectory(System::String ^ sourceDirectoryName, System::String ^ destinationArchiveFileName, System::IO::Compression::CompressionLevel compressionLevel, bool includeBaseDirectory);
public static void CreateFromDirectory (string sourceDirectoryName, string destinationArchiveFileName, System.IO.Compression.CompressionLevel compressionLevel, bool includeBaseDirectory);
static member CreateFromDirectory : string * string * System.IO.Compression.CompressionLevel * bool -> unit
Public Shared Sub CreateFromDirectory (sourceDirectoryName As String, destinationArchiveFileName As String, compressionLevel As CompressionLevel, includeBaseDirectory As Boolean)

參數

sourceDirectoryName
String

要封存的目錄路徑(指定為相對或絕對路徑)。 相對路徑會解譯為與目前的工作目錄相對。

destinationArchiveFileName
String

要建立的封存的路徑(指定為相對或絕對路徑)。 相對路徑會解譯為與目前的工作目錄相對。

compressionLevel
CompressionLevel

其中一個列舉值,指出當建立項目時是否要強調速度或壓縮的效益。

includeBaseDirectory
Boolean

true 表示從 sourceDirectoryName (位於封存根目錄中) 包含目錄名稱,false 表示只包含目錄的內容。

例外狀況

sourceDirectoryNamedestinationArchiveFileNameEmpty,只含有空白字元,或者含有至少一個無效字元。

sourceDirectoryNamedestinationArchiveFileNamenull

sourceDirectoryNamedestinationArchiveFileName 中,指定的路徑、檔案名稱或兩者都超過系統定義的最大長度。

sourceDirectoryName 無效或不存在 (例如,位於未對應的磁碟機上)。

destinationArchiveFileName 已經存在。

-或-

無法開啟指定之目錄中的檔案。

-或-

開啟要封存的檔案時發生 I/O 錯誤。

destinationArchiveFileName 會指定目錄。

-或-

呼叫端沒有必要的權限,無法存取 sourceDirectoryName 中指定的目錄或 destinationArchiveFileName 中指定的檔案。

sourceDirectoryNamedestinationArchiveFileName 包含無效的格式。

-或-

Zip 封存不支援寫入。

範例

此範例示範如何使用 類別來建立和解壓縮 ZIP 封存 ZipFile 。 它會將資料夾的內容壓縮成 zip 封存,然後將該內容解壓縮到新的資料夾。 壓縮封存時,會包含基底目錄,並將壓縮層級設定為強調作業速度高於效率。 若要使用 ZipFile 類別,您必須參考專案中的 System.IO.Compression.FileSystem 組件。

using System;
using System.IO;
using System.IO.Compression;

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

            ZipFile.CreateFromDirectory(startPath, zipPath, CompressionLevel.Fastest, true);

            ZipFile.ExtractToDirectory(zipPath, extractPath);
        }
    }
}
open System.IO.Compression

let startPath = @"c:\example\start"
let zipPath = @"c:\example\result.zip"
let extractPath = @"c:\example\extract"

ZipFile.CreateFromDirectory(startPath, zipPath, CompressionLevel.Fastest, true)

ZipFile.ExtractToDirectory(zipPath, extractPath)
Imports System.IO
Imports System.IO.Compression

Module Module1

    Sub Main()
        Dim startPath As String = "c:\example\start"
        Dim zipPath As String = "c:\example\result.zip"
        Dim extractPath As String = "c:\example\extract"

        ZipFile.CreateFromDirectory(startPath, zipPath, CompressionLevel.Fastest, True)

        ZipFile.ExtractToDirectory(zipPath, extractPath)
    End Sub

End Module

備註

檔案系統中的目錄結構會保留在封存中。 如果目錄是空的,則會建立空的封存。 使用這個方法多載來指定壓縮層級,以及是否要在封存中包含基底目錄。

如果封存已經存在, IOException 則會擲回例外狀況。 如果具有指定名稱的專案已存在於封存中,則會使用相同的名稱建立第二個專案。

如果目錄中的檔案無法新增至封存,封存會保持不完整且無效,而且方法會 IOException 擲回例外狀況。

適用於

CreateFromDirectory(String, Stream, CompressionLevel, Boolean, Encoding)

在指定的資料流程中建立 zip 封存,其中包含指定目錄中的檔案和目錄、針對專案名稱使用指定的壓縮層級和字元編碼,並選擇性地包含基底目錄。

public:
 static void CreateFromDirectory(System::String ^ sourceDirectoryName, System::IO::Stream ^ destination, System::IO::Compression::CompressionLevel compressionLevel, bool includeBaseDirectory, System::Text::Encoding ^ entryNameEncoding);
public static void CreateFromDirectory (string sourceDirectoryName, System.IO.Stream destination, System.IO.Compression.CompressionLevel compressionLevel, bool includeBaseDirectory, System.Text.Encoding? entryNameEncoding);
static member CreateFromDirectory : string * System.IO.Stream * System.IO.Compression.CompressionLevel * bool * System.Text.Encoding -> unit
Public Shared Sub CreateFromDirectory (sourceDirectoryName As String, destination As Stream, compressionLevel As CompressionLevel, includeBaseDirectory As Boolean, entryNameEncoding As Encoding)

參數

sourceDirectoryName
String

要封存的目錄路徑(指定為相對或絕對路徑)。 相對路徑會解譯為與目前的工作目錄相對。

destination
Stream

要儲存 zip 封存的資料流程。

compressionLevel
CompressionLevel

其中一個列舉值,指出當建立項目時是否要強調速度或壓縮的效益。

includeBaseDirectory
Boolean

true 表示從 sourceDirectoryName (位於封存根目錄中) 包含目錄名稱,false 表示只包含目錄的內容。

entryNameEncoding
Encoding

在此封存中讀取或寫入項目名稱時要使用的編碼方式。 只有當需要編碼以與 Zip 封存工具和程式庫互通,且這類工具和程式庫不支援項目名稱使用 UTF-8 編碼時,指定此參數的值。

例外狀況

sourceDirectoryNameEmpty、只包含空白字元,或包含至少一個無效字元。

-或-

資料流程 destination 不支援寫入。

sourceDirectoryNamedestinationnull

sourceDirectoryName 指定的路徑、檔案名或兩者中,都超過系統定義的最大長度。

sourceDirectoryName 無效或不存在 (例如,位於未對應的磁碟機上)。

無法開啟指定之目錄中的檔案。

-或-

開啟要封存的檔案時發生 I/O 錯誤。

sourceDirectoryName 包含無效的格式。

compressionLevel 不是有效的 CompressionLevel 值。

備註

檔案系統中的目錄結構會保留在封存中。 如果目錄是空的,則會建立空的封存。 使用這個方法多載來指定壓縮層級和字元編碼,以及是否要在封存中包含基底目錄。 如果目錄中的檔案無法新增至封存,封存會保持不完整且無效,而且方法會 IOException 擲回例外狀況。

適用於

CreateFromDirectory(String, String, CompressionLevel, Boolean, Encoding)

建立 zip 封存,這個封存包含指定之目錄中的檔案及目錄,針對項目名稱使用指定的壓縮等級和字元編碼方式,並選擇性包含基底目錄。

public:
 static void CreateFromDirectory(System::String ^ sourceDirectoryName, System::String ^ destinationArchiveFileName, System::IO::Compression::CompressionLevel compressionLevel, bool includeBaseDirectory, System::Text::Encoding ^ entryNameEncoding);
public static void CreateFromDirectory (string sourceDirectoryName, string destinationArchiveFileName, System.IO.Compression.CompressionLevel compressionLevel, bool includeBaseDirectory, System.Text.Encoding entryNameEncoding);
public static void CreateFromDirectory (string sourceDirectoryName, string destinationArchiveFileName, System.IO.Compression.CompressionLevel compressionLevel, bool includeBaseDirectory, System.Text.Encoding? entryNameEncoding);
static member CreateFromDirectory : string * string * System.IO.Compression.CompressionLevel * bool * System.Text.Encoding -> unit
Public Shared Sub CreateFromDirectory (sourceDirectoryName As String, destinationArchiveFileName As String, compressionLevel As CompressionLevel, includeBaseDirectory As Boolean, entryNameEncoding As Encoding)

參數

sourceDirectoryName
String

要封存的目錄路徑(指定為相對或絕對路徑)。 相對路徑會解譯為與目前的工作目錄相對。

destinationArchiveFileName
String

要建立的封存的路徑(指定為相對或絕對路徑)。 相對路徑會解譯為與目前的工作目錄相對。

compressionLevel
CompressionLevel

其中一個列舉值,指出當建立項目時是否要強調速度或壓縮的效益。

includeBaseDirectory
Boolean

true 表示從 sourceDirectoryName (位於封存根目錄中) 包含目錄名稱,false 表示只包含目錄的內容。

entryNameEncoding
Encoding

在此封存中讀取或寫入項目名稱時要使用的編碼方式。 只有當需要編碼以與 Zip 封存工具和程式庫互通,且這類工具和程式庫不支援項目名稱使用 UTF-8 編碼時,指定此參數的值。

例外狀況

sourceDirectoryNamedestinationArchiveFileNameEmpty,只含有空白字元,或者含有至少一個無效字元。

-或-

entryNameEncoding 會設定為 UTF-8 以外的 Unicode 編碼方式。

sourceDirectoryNamedestinationArchiveFileNamenull

sourceDirectoryNamedestinationArchiveFileName 中,指定的路徑、檔案名稱或兩者都超過系統定義的最大長度。

sourceDirectoryName 無效或不存在 (例如,位於未對應的磁碟機上)。

destinationArchiveFileName 已經存在。

-或-

無法開啟指定之目錄中的檔案。

-或-

開啟要封存的檔案時發生 I/O 錯誤。

destinationArchiveFileName 會指定目錄。

-或-

呼叫端沒有必要的權限,無法存取 sourceDirectoryName 中指定的目錄或 destinationArchiveFileName 中指定的檔案。

sourceDirectoryNamedestinationArchiveFileName 包含無效的格式。

-或-

Zip 封存不支援寫入。

備註

檔案系統中的目錄結構會保留在封存中。 如果目錄是空的,則會建立空的封存。 使用這個方法多載來指定壓縮層級和字元編碼,以及是否要在封存中包含基底目錄。

如果封存已經存在, IOException 則會擲回例外狀況。 如果具有指定名稱的專案已存在於封存中,則會使用相同的名稱建立第二個專案。

如果目錄中的檔案無法新增至封存,封存會保持不完整且無效,而且方法會 IOException 擲回例外狀況。

如果 entryNameEncoding 設定為 以外的 null 值,則專案名稱會使用指定的編碼方式進行編碼。 如果指定的編碼是 UTF-8,則本機檔頭的一般用途位旗標 (語言編碼旗標,) 針對每個專案設定。

如果 entryNameEncoding 設定為 null ,則專案名稱會根據下列規則進行編碼:

  • 對於包含 ASCII 範圍外字元的專案名稱,會設定語言編碼旗標,並使用 UTF-8 來編碼專案名稱。

  • 對於只包含 ASCII 字元的專案名稱,會設定語言編碼旗標,而目前的系統預設字碼頁則會用來編碼專案名稱。

適用於