簡體   English   中英

如何在c#中只壓縮路徑中的文件和文件夾

[英]How to zip only file and folder in path in c#

我使用此代碼壓縮路徑中的所有文件和文件夾。

using (ZipFile zip = new ZipFile())
{
zip.AddDirectory(@"MyDocuments\ProjectX", "ProjectX");
zip.Save(zipFileToCreate);
}

例如:

  • 文件夾 1
    • 文件夾 2
      • 文件 1
      • 文件 2
      • 文件 3
    • 文件 4
    • 文件5
    • 文件 6

我壓縮了 Folder1,這段代碼正在運行。 但這會使用 Folder1 壓縮所有文件和文件夾。 但我在 Folder1 中只有 zip 文件和文件夾。

結果我的代碼:

  • 我的檔案

    • 文件夾 1

      • 文件夾 2

        • 文件 1
        • 文件 2
        • 文件 3
      • 文件 4

      • 文件5
      • 文件 6

但我想要這個結果:

  • 我的檔案

    • 文件夾 2

       - file1 - file2 - file3
    • 文件 4

    • 文件5
    • 文件 6

我不知道您如何設法將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.

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