如何使用ICSharpCode.SharpZipLib将文件夹添加到zip压缩包?

8
我需要在通过ICSharpCode.SharpZipLib.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存档内部的目录中?

3个回答

18

我明白了:

  • 您可以简单地执行 new ZipEntry("Folder1/Archive.txt");new ZipEntry("Folder2/Archive2.txt");

4

上面的答案适用于多种场景,但当您想要将一个空文件夹添加到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创建文件夹,就像它们是文件一样,并在末尾加上斜杠即可。它可以正常工作。我已经测试过了。


谢谢您的评论。我没有正确地提出问题。我真正想做的是创建一个文件夹+文件组合,而我给出的答案适用于此。 - Saturn K
1
是的。我只是添加了我的评论,因为我正在搜索如何添加空文件夹的答案。现在大家都能找到这两个答案。 - Christian Findlay

-2

和许多公司一样,我没有选择使用的库。这个库已经使用了好几年了。不过我现在已经离开了这家公司 :) 所以你可以打赌我会使用dotnetzip,特别是semverd。 - Saturn K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接