【问题标题】:How do you add a folder to a zip archive with ICSharpCode.SharpZipLib如何使用 ICSharpCode.SharpZipLib 将文件夹添加到 zip 存档
【发布时间】:2013-08-21 16:42:49
【问题描述】:

我必须在使用ICSharpCode.SharZipLib.Zip 以编程方式创建的 zip 文件中创建两个文件夹。我想:

    private void AddToZipStream(byte[] inputStream, ZipOutputStream zipStream, string fileName, string fileExtension)
    {
        var courseName = RemoveSpecialCharacters(fileName);

        var m_Bytes = inputStream;
        if ((m_Bytes != null) && (zipStream != null))
        {
            var newEntry = new ZipEntry(ZipEntry.CleanName(string.Concat(courseName, fileExtension)));
            newEntry.DateTime = DateTime.Now;
            newEntry.Size = m_Bytes.Length;

            zipStream.PutNextEntry(newEntry);
            zipStream.Write(m_Bytes, 0, m_Bytes.Length);
            zipStream.CloseEntry();
            zipStream.UseZip64 = UseZip64.Off;
        }
    }

如何使用ZipEntry 创建目录,然后如何将文件添加到位于 Zip 存档内的目录中?

【问题讨论】:

    标签: c# zip sharpziplib zipoutputstream


    【解决方案1】:

    我想通了:

    • 你可以简单地做new ZipEntry("Folder1/Archive.txt");new ZipEntry("Folder2/Archive2.txt");

    【讨论】:

      【解决方案2】:

      上面的答案适用于几种情况,但当您想将空文件夹添加到 zip 文件时,它就不起作用了。

      我筛选了 SharpZipLib 代码,发现创建文件夹唯一需要做的就是 ZipEntry 名称上的尾随“/”正斜杠。

      这是库中的代码:

      public bool IsDirectory {
          get {
              int nameLength = name.Length;
              bool result =
                  ((nameLength > 0) &&
                  ((name[nameLength - 1] == '/') || (name[nameLength - 1] == '\\'))) ||
                  HasDosAttributes(16)
                  ;
              return result;
          }
      }
      

      所以,只需创建文件夹,就好像它们是带有 ZipEntry 的文件一样,并在末尾加上一个正斜杠。有用。我已经测试过了。

      【讨论】:

      • 感谢您的评论。我没有正确地问这个问题。我真正想做的是创建一个文件夹+文件组合,我给出的答案适用于此。
      • 是的。我刚刚添加了我的评论,因为我正在谷歌搜索添加空文件夹的答案。现在人们会找到这两个答案。
      【解决方案3】:

      我们项目的最佳解决方案是改用更好的方式

      https://dotnetzip.codeplex.com

      https://github.com/haf/DotNetZip.Semverd

      这些方法使用起来更直接

      【讨论】:

      • 与许多公司一样,我没有选择要使用的库。这个库已经使用了多年。不过我已经不在公司了 :) 所以你敢打赌我会使用 dotnetzip,特别是 semverd。
      猜你喜欢
      • 1970-01-01
      • 2011-09-15
      • 2011-09-07
      • 1970-01-01
      • 1970-01-01
      • 2014-04-15
      • 2015-02-24
      • 1970-01-01
      • 2010-10-02
      相关资源
      最近更新 更多