我在使用ZipFile和ZipArchive与.Net 4.5时遇到了一个奇怪的问题。
ZipFile.CreateFromDirectory获取目录的所有内容,包括空文件夹。 如果我尝试通过右键单击>使用Windows资源管理器创建相同的zip文件;发送至>压缩文件夹,我收到一条警告消息,说明空文件夹已被删除。
我正在将生成的zip文件加载到在Apache Tomcat上运行的应用程序中。此应用程序为我使用ZipFile.CreateFromDirectory生成的zip中包含的每个文件抛出错误。我通过Windows资源管理器手动创建的zip很好。
我怀疑问题在于空的压缩文件夹,但尚无法明确地得出结论。如果空文件夹是原因,我需要一种方法来使用ZipFile.CreateFromDirectory,不包括空文件夹。
答案 0 :(得分:0)
取自上述评论:
我没有.NET 4.5,但是来自remarks section:“文件系统中的目录结构保留在存档中。如果目录为空,则会创建一个空存档。”< / em>所以这是设计的。
所以你要么
我首先找不到在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());
}