【问题标题】:Gzip a directory that has subdirectories using GZipStream class with C#?使用带有 C# 的 GZipStream 类 Gzip 具有子目录的目录?
【发布时间】:2011-05-11 16:29:16
【问题描述】:

This MSDN 站点有一个 gzip 文件的示例。那么,我怎样才能 gzip 一个包含子目录的整个目录呢?

【问题讨论】:

标签: c# .net gzip gzipstream


【解决方案1】:

由于 gzip 仅适用于文件,我建议您 tar 您的目录,然后 gzip 生成的 tar 文件。

您可以使用tar-csSharpZipLib 来生成您的tar 文件。

【讨论】:

    【解决方案2】:

    你不能!

    GZip 是为文件而非目录创建的 :)

    【讨论】:

    • +1。但是,您可以执行诸如创建 tarball 之类的操作,然后 gzip 以获取 *.tar.gz 文件。或者只是使用 DotNetZip (dotnetzip.codeplex.com) 压缩整个内容
    【解决方案3】:

    gzip 在单一流上运行。要使用 gzipstream 创建多流(多文件)存档,您需要包含自己的索引。基本上,在最简单的情况下,您会将文件偏移量写入输出流的开头,然后当您将其读回时,您会知道边界在哪里。此方法与 PKZIP 不兼容。为了兼容,您必须阅读并实现 ZIP 格式...或使用 SharpZip 或 Zip.NET 之类的东西

    【讨论】:

      【解决方案4】:

      您可以在纯 .NET 3.0 中压缩目录。由于修改了 GPL 许可证,可能不希望使用 SharpZipLib。

      首先,您需要一个对 WindowsBase.dll 的引用。

      此代码将打开或创建一个 zip 文件,在其中创建一个目录,并将文件放在该目录中。如果你想压缩一个文件夹,可能包含子目录,你可以遍历目录中的文件并为每个文件调用这个方法。然后,您可以深度优先搜索文件的子目录,为每个文件调用方法并传入路径以在 zip 文件中创建该层次结构。

      public void AddFileToZip(string zipFilename, string fileToAdd, string destDir)
      {
          using (Package zip = System.IO.Packaging.Package.Open(zipFilename, FileMode.OpenOrCreate))
          {
              string destFilename = "." + destDir + "\\" + Path.GetFileName(fileToAdd);
              Uri uri = PackUriHelper.CreatePartUri(new Uri(destFilename, UriKind.Relative));
              if (zip.PartExists(uri))
              {
                  zip.DeletePart(uri);
              }
              PackagePart part = zip.CreatePart(uri, "", CompressionOption.Normal);
      
              using (FileStream fileStream = new FileStream(fileToAdd, FileMode.Open, FileAccess.Read))
              {
                  using (Stream dest = part.GetStream())
                  {
                      CopyStream(fileStream, dest);
                  }
              }
          }
      }
      

      destDir 可以是一个空字符串,这会将文件直接放在 zip 中。

      来源: https://weblogs.asp.net/jongalloway/creating-zip-archives-in-net-without-an-external-library-like-sharpziplib

      https://weblogs.asp.net/albertpascual/creating-a-folder-inside-the-zip-file-with-system-io-packaging

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-01
        • 2022-06-14
        • 2018-04-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多