語言

ZipFile.OpenAsync 方法

定義

多載

名稱 Description
OpenAsync(String, ZipArchiveMode, CancellationToken)

非同步在指定ZipArchivearchiveFileName模式下開啟 aZipArchiveMode。

OpenAsync(String, ZipArchiveMode, Encoding, CancellationToken)

非同步在指定ZipArchivearchiveFileName模式下開啟 aZipArchiveMode。

OpenAsync(String, ZipArchiveMode, CancellationToken)

來源:
ZipFile.Create.Async.cs
來源:
ZipFile.Create.Async.cs

非同步在指定ZipArchivearchiveFileName模式下開啟 aZipArchiveMode。

public static System.Threading.Tasks.Task<System.IO.Compression.ZipArchive> OpenAsync(string archiveFileName, System.IO.Compression.ZipArchiveMode mode, System.Threading.CancellationToken cancellationToken = default);
static member OpenAsync : string * System.IO.Compression.ZipArchiveMode * System.Threading.CancellationToken -> System.Threading.Tasks.Task<System.IO.Compression.ZipArchive>
Public Shared Function OpenAsync (archiveFileName As String, mode As ZipArchiveMode, Optional cancellationToken As CancellationToken = Nothing) As Task(Of ZipArchive)

參數

archiveFileName
String

檔案系統上的路徑,開啟壓縮檔。

mode
ZipArchiveMode

其中一個列舉值,指定對開啟檔案中條目允許的行動。

cancellationToken
CancellationToken

取消令牌用來監控取消申請。

傳回

例外狀況

archiveFileName 是零長度字串,僅包含空白,或包含一個或多個無效字元,依 InvalidPathChars 定義。

archiveFileName 是 null。

archiveFileName 超過系統定義的最大長度。 例如,在基於 Windows 的平台上,路徑必須少於 248 個字元,檔案名稱必須少於 260 個字元。

指定的 archiveFileName 欄位是無效的(例如,它存在於未映射的硬碟上)。

開啟檔案時發生未說明的輸入輸出錯誤。

archiveFileName 指定一個目錄。

-或-

來電者沒有所需的權限。

mode 指定了一個無效值。

未找到該檔案 archiveFileName 。

archiveFileName 格式無效。

指定的檔案無法被解讀為 zip 檔。

-或-

mode 且 Update 有條目缺失或損壞無法讀取。

-或-

mode 且 Update 某項太大無法放入記憶體。

非同步操作被取消。

備註

針對 archiveFileName:

路徑可指定相對或絕對路徑資訊。 相對路徑資訊會被解讀為相對於目前工作目錄的相對於。

針對 mode:

若 Read 指定為 ,檔案以 開啟 System.IO.FileMode.Open,若檔案不存在則拋出 a FileNotFoundException 。

若 Create 指定為 ,檔案以 開, System.IO.FileMode.CreateNew若檔案已存在則拋出 a System.IO.IOException 。

若Update指定為 ,則以 開啟檔案。System.IO.FileMode.OpenOrCreate

如果該檔案存在且是壓縮檔,其條目將被存取並可修改,並可建立新的條目。

如果該檔案存在且不是壓縮檔,則拋出 a InvalidDataException 鍵。

如果檔案存在且為空或不存在,就會建立一個新的 zip 檔。

用這個 Create 模式建立壓縮檔在建立新壓縮檔時會更有效率。

適用於

OpenAsync(String, ZipArchiveMode, Encoding, CancellationToken)

來源:
ZipFile.Create.Async.cs
來源:
ZipFile.Create.Async.cs

非同步在指定ZipArchivearchiveFileName模式下開啟 aZipArchiveMode。

public static System.Threading.Tasks.Task<System.IO.Compression.ZipArchive> OpenAsync(string archiveFileName, System.IO.Compression.ZipArchiveMode mode, System.Text.Encoding? entryNameEncoding, System.Threading.CancellationToken cancellationToken = default);
static member OpenAsync : string * System.IO.Compression.ZipArchiveMode * System.Text.Encoding * System.Threading.CancellationToken -> System.Threading.Tasks.Task<System.IO.Compression.ZipArchive>
Public Shared Function OpenAsync (archiveFileName As String, mode As ZipArchiveMode, entryNameEncoding As Encoding, Optional cancellationToken As CancellationToken = Nothing) As Task(Of ZipArchive)

參數

archiveFileName
String

檔案系統上的路徑,開啟壓縮檔。

mode
ZipArchiveMode

其中一個列舉值,指定對開啟檔案中條目允許的行動。

entryNameEncoding
Encoding

閱讀或寫入此 ZipArchive 中條目名稱與註解時所使用的編碼。

cancellationToken
CancellationToken

取消令牌用來監控取消申請。

傳回

例外狀況

archiveFileName 是零長度字串,僅包含空白,或包含一個或多個無效字元,依 InvalidPathChars 定義。

archiveFileName 是 null。

archiveFileName 超過系統定義的最大長度。 例如,在基於 Windows 的平台上,路徑必須少於 248 個字元,檔案名稱必須少於 260 個字元。

archiveFileName 是無效的,(例如,它位於未映射的磁碟機上)。

開啟檔案時發生未說明的輸入輸出錯誤。

archiveFileName 指定一個目錄。

-或-

來電者沒有所需的權限。

mode 指定了一個無效值。

未找到該檔案 archiveFileName 。

archiveFileName 格式無效。

指定的檔案無法被解讀為 zip 檔。

-或-

mode 且 Update 有條目缺失或損壞無法讀取。

-或-

mode 且 Update 某項太大無法放入記憶體。

非同步操作被取消。

備註

針對 archiveFileName:

路徑可指定相對或絕對路徑資訊。 相對路徑資訊會被解讀為相對於目前工作目錄的相對於。

針對 mode:

若 Read 指定為 ,檔案以 開啟 System.IO.FileMode.Open,若檔案不存在則拋出 a FileNotFoundException 。

若 Create 指定為 ,檔案以 開, System.IO.FileMode.CreateNew若檔案已存在則拋出 a System.IO.IOException 。

若Update指定為 ,則以 開啟檔案。System.IO.FileMode.OpenOrCreate

如果該檔案存在且是壓縮檔,其條目將被存取並可修改,並可建立新的條目。

如果該檔案存在且不是壓縮檔,則拋出 a InvalidDataException 鍵。

如果檔案存在且為空或不存在,就會建立一個新的 zip 檔。

用這個 Create 模式建立壓縮檔在建立新壓縮檔時會更有效率。

不建議指定除 null for entryNameEncoding 以外的值。 然而,這可能是為了與無法正確支援 UTF-8 編碼的 zip 壓縮工具和函式庫的互通性所必需的。

此數值的使用方式如下:

  • 讀取(開啟)ZIP 壓縮檔:
    • 若 entryNameEncoding 未指定 (== null):
      • 對於本地檔案標頭通用位元旗標 中語言 編碼旗標(EFS)未設定的條目,請使用目前系統預設代碼頁(Encoding.Default)來解碼條目名稱並註解。
      • 對於 設定了 本地檔案標頭通用位元旗標中語言編碼旗標(EFS)的條目,請使用 UTF-8 (Encoding.UTF8) 來解碼條目名稱並註解。
    • 若 entryNameEncoding 指定為(!= null):
      • 對於本地檔案標頭通用位元旗標 中語言 編碼旗標(EFS)未設定的條目,請使用指定的 entryNameEncoding 標示來解碼條目名稱與註解。
      • 對於 設定了 本地檔案標頭通用位元旗標中語言編碼旗標(EFS)的條目,請使用 UTF-8 (Encoding.UTF8) 來解碼條目名稱並註解。
  • 撰寫(儲存)ZIP 壓縮檔:
    • 若 entryNameEncoding 未指定 (== null):
      • 對於包含 ASCII 範圍外字元的條目名稱與註解,語言編碼旗標(EFS)會設在本地檔案標頭的通用位元旗標中,並使用 UTF-8 (Encoding.UTF8) 將條目名稱與註解編碼成位元組。
      • 對於不包含 ASCII 範圍外字元的條目名稱與註解,語言編碼旗標(EFS)不會在本地檔案標頭的通用位元旗標中設定,且將使用目前系統預設的代碼頁Encoding.Default()來將條目名稱與註解編碼成位元組。
    • 若 entryNameEncoding 指定為(!= null):
      • 指定的 entryNameEncoding 會被用來將條目名稱和註解編碼成位元組。
      • 本地檔案標頭通用位元旗標中的語言編碼旗標(EFS)當且僅當指定的 entryNameEncoding UTF-8 編碼時才會被設定。
  • 除了 UTF-8 外,無法使用其他 Unicode 編碼, entryNameEncoding否則 an ArgumentException 會被拋出。

    適用於