[英]How to zip only file and folder in path in c#
我使用此代碼壓縮路徑中的所有文件和文件夾。
using (ZipFile zip = new ZipFile())
{
zip.AddDirectory(@"MyDocuments\ProjectX", "ProjectX");
zip.Save(zipFileToCreate);
}
例如:
我壓縮了 Folder1,這段代碼正在運行。 但這會使用 Folder1 壓縮所有文件和文件夾。 但我在 Folder1 中只有 zip 文件和文件夾。
結果我的代碼:
我的檔案
文件夾 1
文件夾 2
文件 4
但我想要這個結果:
我的檔案
文件夾 2
- file1 - file2 - file3
文件 4
我不知道您如何設法將ZipFile
類實例化為其靜態實例,以任何方式使用此代碼
string startPath = @"<path-to-folder1>";
string zipPath = @"<path-to-output>\MyFileZip.zip";
ZipFile.CreateFromDirectory(startPath, zipPath);
請記住,目標文件夾不能與folder1
相同,否則您將獲得異常聲明,聲稱進程正在使用中
您可以使用下面的靜態方法重寫,並將includeBaseDirectory
指定為false
public static void CreateFromDirectory (string sourceDirectoryName,
string destinationArchiveFileName,
System.IO.Compression.CompressionLevel compressionLevel, bool
includeBaseDirectory, System.Text.Encoding entryNameEncoding);
如果壓縮文件的目標文件夾應與源文件夾相同,則可以將“用戶Temp
目錄”用作臨時存儲。
這是因為您無法在包含要壓縮的文件/文件夾的目錄中創建一個Zip文件:它會嘗試自行壓縮,從而導致異常。
string sourceFolder =
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "ProjectX");
string destinationFolder = sourceFolder;
string ZippedFileName = "ZippedFile.zip";
string userTempFolder = Environment.GetEnvironmentVariable("Temp", EnvironmentVariableTarget.User);
string zippedTempFile = Path.Combine(userTempFolder, ZippedFileName);
if (File.Exists(zippedTempFile)) { File.Delete(zippedTempFile); }
ZipFile.CreateFromDirectory(sourceFolder, ZippedFileName);
File.Move(zippedTempFile, Path.Combine(destinationFolder, ZippedFileName));
ZIPFile.CreateFromDirectory 的最后一個參數(您為其傳遞值 true)確定目錄本身是否應作為 ZIP 的根目錄包含在內。 如果您將其更改為 false,它應該可以按您的意願工作。
ZipFile.CreateFromDirectory(startPath, zipPath, CompressionLevel.Fastest, false);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.