I am handling some 3rd party ZIP files with .Net 4.5.2 System.IO.Compression.ZipArchive class and all works nicely.
However, I need to tell apart file entries from directory entries, preferably without extracting them first.
Is there a way to tell if a ZipArchive entry is a directory without extracting it?
As far as could find out there is no property of ZipArchiveEntry that tells if it is a file or directory.
Best Answer
Seems like I really do tend to answer my own questions.
Anyway, the answer is straight forward:
If
ZipArchiveEntry
is a directory it will have itsFullName
property ending with "/" (e.g. "some_dir/") and itsName
property will be empty string ("").If only someone cared to put that info in the documentation ...
Oh, and there is a catch:
If a directory contains files, there does not have to be a separate
ZipArchiveEntry
for it.So, if you are looking for a specific directory you cannot just look for one
ZipArchiveEntry
with emptyName
or with "/" at the end ofFullName
- you have to parse the whole tree (FullName
for eachZipArchiveEntry
).Luckily I had only to check if there is a single common directory for all entries (
FullName
properties of allZipArchiveEntry
items shoud start with the same string in the form of "folder_name/").