如何使用ICSharpCode.SharpZipLib将文件夹添加到zip存档

时间:2013-08-21 16:42:50

标签: c# zip sharpziplib zipoutputstream

我必须在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 存档内的目录?

3 个答案:

答案 0 :(得分:12)

我明白了:

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

答案 1 :(得分:3)

上面的答案适用于多种情况,但是当您想要将空文件夹添加到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文件一样,并在末尾添加正斜杠。有用。我测试了它。

答案 2 :(得分:0)

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

https://dotnetzip.codeplex.com

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

方法更直接使用