如何判断 "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
。
所以,如果你正在寻找一个特定的目录,你不能只寻找一个 ZipArchiveEntry
空 Name
或 FullName
末尾有“/”的目录 - 你必须解析整个树(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 的扩展方法
我正在使用 .Net 4.5.2 处理一些第 3 方 ZIP 文件 System.IO.Compression.ZipArchive class 并且一切正常。
但是,我需要区分 文件条目 和 目录条目 ,最好不要先提取它们。
有没有办法在不解压的情况下判断 ZipArchive 条目是否为目录?
据我所知,ZipArchiveEntry 中没有 属性 可以判断它是文件还是目录。
看来我确实倾向于自己回答问题。
无论如何,答案很简单:
如果 ZipArchiveEntry
是一个目录,它的 FullName
属性 将以“/”结尾(例如 "some_dir/" ) 及其 Name
属性 将是空字符串 (""").
如果有人愿意将该信息放入文档中...
哦,还有 一个问题:
如果一个目录包含文件,那么不是必须为它单独ZipArchiveEntry
。
所以,如果你正在寻找一个特定的目录,你不能只寻找一个 ZipArchiveEntry
空 Name
或 FullName
末尾有“/”的目录 - 你必须解析整个树(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 的扩展方法