You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ICSharpCode.SharpZipLib.Zip添加目录条目报错‘Entry cannot have any data’

解决添加Zip目录条目时的“Entry cannot have any data”异常

问题原因

你遇到的异常是因为目录条目本身没有实际数据,但代码中给目录设置了需要处理数据的操作(比如Deflated压缩方式或AES加密),导致库无法处理空数据的压缩/加密逻辑。

解决方案

方案1:使用内置的AddDirectory方法(推荐)

DotNetZip库提供了直接添加目录的方法,会自动处理目录条目的所有正确属性,无需手动创建ZipEntry:

using (var zip = ZipFile.Create(zipPath))
{
    if (!string.IsNullOrEmpty(password))
    {
        zip.ZipCryptoEncoding = Encoding.UTF8;
        zip.Password = password;
    }
    zip.UseZip64 = UseZip64.Dynamic;

    // 直接添加目标目录,自动生成正确的目录条目
    zip.AddDirectory(dirPath);
    
    zip.Save();
}

方案2:手动创建目录条目时修正属性

如果必须手动构建ZipEntry,需要调整以下设置:

  • 目录只能用Stored压缩方式(默认就是该值,可省略),不能用Deflated(该方式需要压缩实际数据)
  • 不要给目录条目设置AES加密(无数据可加密)

修正后的代码:

using (var zip = ZipFile.Create(zipPath))
{
    if (!string.IsNullOrEmpty(password))
    {
        zip.ZipCryptoEncoding = Encoding.UTF8;
        zip.Password = password;
    }
    zip.UseZip64 = UseZip64.Dynamic;

    var entryFactory = new ZipEntryFactory();
    ZipEntry dirEntry = entryFactory.MakeDirectoryEntry(dirPath);
    dirEntry.DateTime = DateTime.Now;
    dirEntry.IsUnicodeText = true;

    // 目录条目只能用Stored压缩方式(默认已设置,此处可省略)
    dirEntry.CompressionMethod = CompressionMethod.Stored;

    zip.BeginUpdate();
    zip.Add(dirEntry);
    zip.CommitUpdate();
}

关键说明

  • 目录条目是用于标记路径的元数据,不包含实际文件内容,因此不需要压缩或加密操作。
  • AddDirectory方法会自动处理目录的路径格式、属性设置,避免手动构建条目时的错误。

内容的提问来源于stack exchange,提问作者TrustMe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 03:27:11