8

我必须在以编程方式使用 .zip 创建的 zip 文件中创建两个文件夹ICSharpCode.SharZipLib.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存档内的目录?

4

3 回答 3

17

我想到了:

  • 你可以简单地做new ZipEntry("Folder1/Archive.txt");new ZipEntry("Folder2/Archive2.txt");
于 2013-08-21T18:02:48.843 回答
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 的文件一样,并在末尾加上一个正斜杠。有用。我已经测试过了。

于 2016-07-30T08:09:34.973 回答
-2

我们项目的最佳解决方案是切换到更好的方式

https://dotnetzip.codeplex.com

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

这些方法使用起来更直接

于 2017-09-28T14:52:08.817 回答