如何判断 "ZipArchiveEntry" 是否是目录?

How to tell if a "ZipArchiveEntry" is directory?

我正在使用 .Net 4.5.2 处理一些第 3 方 ZIP 文件 System.IO.Compression.ZipArchive class 并且一切正常。
但是,我需要区分 文件条目 目录条目 ,最好不要先提取它们。

有没有办法在不解压的情况下判断 ZipArchive 条目是否为目录?

据我所知,ZipArchiveEntry 中没有 属性 可以判断它是文件还是目录。

看来我确实倾向于自己回答问题。

无论如何,答案很简单:

如果 ZipArchiveEntry 是一个目录,它的 FullName 属性 将以“/”结尾(例如 "some_dir/" ) 及其 Name 属性 将是空字符串 (""").

如果有人愿意将该信息放入文档中...

哦,还有 一个问题:
如果一个目录包含文件,那么不是必须为它单独ZipArchiveEntry
所以,如果你正在寻找一个特定的目录,你不能只寻找一个 ZipArchiveEntryNameFullName 末尾有“/”的目录 - 你必须解析整个树(FullName 每个 ZipArchiveEntry)。

幸运的是,我只需要检查所有条目是否有一个公共目录(所有 ZipArchiveEntry 项的 FullName 属性应该以 [=46= 形式的相同字符串开头]).

ICSharpZipLib 是这样做的:

    public bool IsDirectory
    {
        get
        {
            int nameLength = name.Length;
            bool result =
                ((nameLength > 0) &&
                ((name[nameLength - 1] == '/') || (name[nameLength - 1] == '\'))) ||
                HasDosAttributes(16)
                ;
            return result;
        }
    }

    public bool IsFile
    {
        get
        {
            return !IsDirectory && !HasDosAttributes(8);
        }
    }

可以将这些写成 ZipArchiveEntry 的扩展方法