簡體   English   中英

使用ZipArchive類在C#中的存檔中創建存檔

[英]Create an archive inside of an archive in C# with ZipArchive class

如標題所示,我正在嘗試在zip內創建一個zip。

我在名為“ TargetFilePath”的變量處創建了一個zip存檔。

var projectDirectoryPath = currentProjectViewModel.DirectoryPath;
ZipFile.CreateFromDirectory(projectDirectoryPath, TargetFilePath+@"/Project.zip");

我假設上面的方法不起作用,因為路徑c:\\ test.zip \\ project.zip不是有效路徑。

為了清楚起見,請進行編輯:我確實想壓縮一些文件並將其壓縮到另一個檔案中。 它必須使用System.IO.Compression,沒有任何第三方方法。

根據我的理解,您必須為zip文件創建目標地址,並且根據我的經驗,該目標地址也不能是無效路徑,例如“ c:\\ test.zip \\ project.zip”

最簡單的方法是使用projectDirectoryPath的內容在一個臨時文件中創建zip文件,然后將其添加到目標zip存檔中。

所以基本上是這樣的:

var projectDirectoryPath = currentProjectViewModel.DirectoryPath;
var tempFile = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
try
{
    ZipFile.CreateFromDirectory(projectDirectoryPath, tempFile);

    using (var archive = ZipFile.Open(TargetFilePath, ZipArchiveMode.Update))
    {
        archive.CreateEntryFromFile(tempFile, "Project.zip", CompressionLevel.NoCompression);
    }
}
finally
{
    System.IO.File.Delete(tempFile);
}

我建議您使用CompressionLevel.NoCompression因為zip存檔已被壓縮,而另一層壓縮將不會為其添加任何值。 打開存檔時使用ZipArchiveMode.Update很重要,因此實際上是更改了zip文件。 此枚舉器的其他值用於從頭開始創建新檔案或將其以只讀方式打開。

在示例中,我使用了CreateEntryFromFile函數。 這是一種擴展方法,因此請確保您在using聲明中具有名稱空間。

可以以某種方式實施此操作,因此不需要臨時文件,但這需要更多代碼,因為您必須自己創建新的zip文件,並將其直接寫到在目錄中創建新條目時獲得的流中。 achive 但是在大多數情況下,我給出的例子可以勝任。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM