You need to enable JavaScript to run this app. C# 如何仅获取Zip文件顶层的文件名(排除子目录内容)
优惠活动
大模型
产品
解决方案
定价
更多

C# 如何仅获取Zip文件顶层的文件名(排除子目录内容)

问题根因

你现在代码拿不对结果,核心是搞错了属性的作用:ZipArchiveEntry.Name 只会返回路径最末端的文件名片段,完全不携带层级信息——哪怕文件藏在好几层子目录里,通过 Name 读到的也只是最终的文件名,根本没法判断它是不是在zip的最外层。

修正方案

要准确筛出顶层文件,得靠 FullName 属性做判断:

  • 这个属性存的是条目在zip包内的完整相对路径
  • 所有符合规范的zip包,内部路径统一用正斜杠 / 做层级分隔,只要条目路径里包含 /,就说明它处在子目录层级里
  • 遍历的时候要额外跳过纯目录条目:这类条目本身是文件夹,不是文件,它们的FullName一般以 / 结尾,不能算在文件列表里

修正后的可运行参考代码:

using System.IO.Compression;

// 项目需要提前引用对应版本的 System.IO.Compression.ZipFile 程序集
using var zip = ZipFile.OpenRead(pathToZip);
var topLevelFileNames = new List<string>();

foreach (var entry in zip.Entries)
{
    // 跳过zip内的目录条目,避免把目录名误判为文件
    if (entry.FullName.EndsWith('/'))
        continue;
    
    // 路径里没有层级分隔符,就是顶层文件
    if (!entry.FullName.Contains('/'))
    {
        topLevelFileNames.Add(entry.Name);
    }
}
容易踩的坑
  • 不要拿 Name 做筛选判断,这个属性没有路径信息,完全区分不了层级
  • 不要用操作系统的反斜杠 \ 做路径分隔判断,zip规范里统一用正斜杠,哪怕是Windows下打包的zip,内部存的路径也不会用反斜杠
  • 如果你需要的是带完整相对路径的顶层条目名,直接读取 FullName 就可以,不需要额外拼接

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 19:36:04