如何在C#中的路径中仅压缩文件和文件夹

时间:2019-01-28 03:51:07

标签: c# zipfile

我使用此代码来压缩路径中的所有文件和文件夹。

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

例如:

  • 文件夹1
    • 文件夹2
      • file1
      • file2
      • file3
    • file4
    • file5
    • file6

我压缩了Folder1,并且此代码有效。但这会使用Folder1压缩所有文件和文件夹。但是我在Folder1中只有zip文件和文件夹。

生成我的代码:

  • MyFileZip

    • 文件夹1

      • 文件夹2

        • file1
        • file2
        • file3
      • file4

      • file5
      • file6

但是我想要这个结果:

  • MyFileZip

    • 文件夹2

          - file1
          - file2
          - file3
      
    • file4

    • file5
    • file6

3 个答案:

答案 0 :(得分:1)

我想知道如何将ZipFile类实例化为静态类, 任何方式使用此代码

    string startPath = @"<path-to-folder1>";
    string zipPath = @"<path-to-output>\MyFileZip.zip";

    ZipFile.CreateFromDirectory(startPath, zipPath);

请记住,目标文件夹不能与folder1相同,否则您将获得声明正在使用异常的进程

答案 1 :(得分:0)

您可以使用以下静态方法覆盖并将includeBaseDirectory指定为false

   public static void CreateFromDirectory (string sourceDirectoryName,
    string destinationArchiveFileName,
    System.IO.Compression.CompressionLevel compressionLevel, bool
    includeBaseDirectory, System.Text.Encoding entryNameEncoding);

Documentation

答案 2 :(得分:0)

如果压缩文件的目标文件夹应该与源文件夹相同,则可以使用用户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));