读取带有空子目录的压缩文件夹会导致问题

时间:2014-09-22 13:50:09

标签: c# .net zip compression

我在使用ZipFile和ZipArchive与.Net 4.5时遇到了一个奇怪的问题。

ZipFile.CreateFromDirectory获取目录的所有内容,包括空文件夹。 如果我尝试通过右键单击>使用Windows资源管理器创建相同的zip文件;发送至>压缩文件夹,我收到一条警告消息,说明空文件夹已被删除。

我正在将生成的zip文件加载到在Apache Tomcat上运行的应用程序中。此应用程序为我使用ZipFile.CreateFromDirectory生成的zip中包含的每个文件抛出错误。我通过Windows资源管理器手动创建的zip很好。

我怀疑问题在于空的压缩文件夹,但尚无法明确地得出结论。如果空文件夹是原因,我需要一种方法来使用ZipFile.CreateFromDirectory,不包括空文件夹。

2 个答案:

答案 0 :(得分:0)

取自上述评论:

我没有.NET 4.5,但是来自remarks section“文件系统中的目录结构保留在存档中。如果目录为空,则会创建一个空存档。”< / em>所以这是设计的。

所以你要么

  • 在tomcat上的comsuming app中修复它,或者你必须
  • 创建一个临时文件夹,如果可能,只包含非空文件夹

我首先找不到在CreateFromDirectory中排除空文件夹的方法。

答案 1 :(得分:0)

或者,我可以从创建的zip文件中删除空目录。虽然这仍然会导致Tomcat应用程序出错。

        // compress and copy new zip
        ZipFile.CreateFromDirectory(dirtocopy.FullName, NewZipFilePath);
        using (ZipArchive za = ZipFile.Open(NewZipFilePath, ZipArchiveMode.Update))
        {
            // only empty folders end with \
            List<ZipArchiveEntry> emptyFolders = (from ZipArchiveEntry zae in za.Entries
                                where zae.FullName.EndsWith("\\")
                                select zae).ToList<ZipArchiveEntry>();

            emptyFolders.ForEach((ZipArchiveEntry folder) => folder.Delete());
        }