我正在使用.Net 4.5.2 System.IO.Compression.ZipArchive类处理一些第三方ZIP文件,并且一切正常。
但是,我需要从目录条目中区分文件条目,最好不要先提取它们。
有没有办法判断ZipArchive条目是否是一个没有提取它的目录?
据我们所知,ZipArchiveEntry没有任何属性可以告诉它是文件还是目录。
答案 0 :(得分:29)
似乎我真的倾向于回答我自己的问题。
无论如何,答案是直截了当的:
如果ZipArchiveEntry
是目录,则其FullName
属性以" /"结尾(例如" some_dir /" )及其Name
属性将为空字符串("" )。 强>
如果只有人关心将这些信息放在文档中......
哦,还有抓住:
如果某个目录包含文件,则不必须是单独的ZipArchiveEntry
。
因此,如果您要查找特定目录,则不能只查找一个ZipArchiveEntry
空Name
或" /"在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的扩展方法