如何判断" ZipArchiveEntry"是目录?

时间:2016-10-24 16:44:20

标签: .net zip system.io.compression

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

有没有办法判断ZipArchive条目是否是一个没有提取它的目录?

据我们所知,ZipArchiveEntry没有任何属性可以告诉它是文件还是目录。

2 个答案:

答案 0 :(得分:29)

似乎我真的倾向于回答我自己的问题。

无论如何,答案是直截了当的:

如果ZipArchiveEntry是目录,则其FullName属性以" /"结尾(例如" some_dir /" )及其Name属性将为空字符串("" )。

如果只有人关心将这些信息放在文档中......

哦,还有抓住
如果某个目录包含文件,则必须是单独的ZipArchiveEntry
因此,如果您要查找特定目录,则不能只查找一个ZipArchiveEntryName或" /"在FullName的末尾 - 你必须解析整个树(每个FullName ZipArchiveEntry)。

幸运的是,我只需要检查所有条目是否都有一个公共目录(FullName项的所有ZipArchiveEntry属性都以" folder_name /形式的相同字符串开头&#34)

答案 1 :(得分:0)

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的扩展方法