[英]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.