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

.NET Framework 4.7.2向现有Zip添加文件后文件不显示问题

解决向现有Zip文件添加内容后文件不显示的问题

问题根源

你的代码生成的pathInZip开头带有多余的斜杠(比如/03/Log_2024-03-01.log),而.NET的ZipArchive在Update模式下无法正确识别这种以斜杠开头的条目路径——文件确实被写入了Zip包,但路径格式不符合Zip规范,导致解压工具无法解析出正确的目录结构,自然看不到新增内容。

而ZipFile.CreateFromDirectory()能正常工作,是因为该方法会自动处理路径,生成符合规范的相对路径条目(比如03/Log_2024-03-01.log)。

修正方案

只需要调整pathInZip的生成逻辑,去掉开头的分隔符(反斜杠或正斜杠),确保路径是相对路径即可。同时不需要手动创建文件夹条目,CreateEntryFromFile会自动创建所需的目录结构。

修正后的代码片段:

using (var zip = ZipFile.Open(destinationZipFilePath, ZipArchiveMode.Update))
{
    var sourceDirInfo = new DirectoryInfo(sourceDirectoryPath);
    foreach (var file in sourceDirInfo.EnumerateFiles("*", SearchOption.AllDirectories))
    {
        // 生成相对路径,去掉开头的分隔符
        var relativePath = Path.GetRelativePath(sourceDirInfo.FullName, file.FullName);
        // 替换反斜杠为正斜杠,符合Zip规范
        var pathInZip = relativePath.Replace("\\", "/");

        // 移除已存在的条目
        var existingEntry = zip.GetEntry(pathInZip);
        if (existingEntry != null)
        {
            existingEntry.Delete();
        }

        // 添加文件,自动保留文件属性
        zip.CreateEntryFromFile(
            file.FullName,
            pathInZip,
            compressionLevel);
    }
}

关键细节说明

  1. 使用Path.GetRelativePath()替代手动字符串替换,能更可靠地生成相对路径,避免因路径格式差异导致的开头分隔符问题;
  2. CreateEntryFromFile会自动根据pathInZip中的目录结构创建对应的Zip文件夹条目,无需手动创建;
  3. 该方案完全保留了CreateEntryFromFile的特性,能保留文件的创建/修改日期等属性,且无需解压重新生成Zip包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 01:27:05