diff options
author | Alex Zolotarev <deathbaba@gmail.com> | 2011-07-22 15:02:00 +0400 |
---|---|---|
committer | Alex Zolotarev <alex@maps.me> | 2015-09-23 01:20:50 +0300 |
commit | efc5f6aa81d49bd2641ad0c1fce39dc22ff75c2f (patch) | |
tree | 40b59077e0b1a83cd27ae56f024c5e1eb5e05baf /coding/zip_reader.cpp | |
parent | 0afb0f3b08782065ffb4fe15b3669dc56c90618e (diff) |
Added zip files listing support into coding/zip_reader
Diffstat (limited to 'coding/zip_reader.cpp')
-rw-r--r-- | coding/zip_reader.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/coding/zip_reader.cpp b/coding/zip_reader.cpp index 0849f8c02d..ee798f6769 100644 --- a/coding/zip_reader.cpp +++ b/coding/zip_reader.cpp @@ -39,3 +39,28 @@ ZipFileReader::ZipFileReader(string const & container, string const & file) SetOffsetAndSize(offset, fileInfo.uncompressed_size); } + +vector<string> ZipFileReader::FilesList(string const & zipContainer) +{ + unzFile zip = unzOpen64(zipContainer.c_str()); + if (!zip) + MYTHROW(OpenZipException, ("Can't get zip file handle", zipContainer)); + + MY_SCOPE_GUARD(zipGuard, bind(&unzClose, zip)); + + if (UNZ_OK != unzGoToFirstFile(zip)) + MYTHROW(LocateZipException, ("Can't find first file inside zip", zipContainer)); + + vector<string> filesList; + do + { + char fileName[256]; + if (UNZ_OK != unzGetCurrentFileInfo64(zip, NULL, fileName, ARRAY_SIZE(fileName), NULL, 0, NULL, 0)) + MYTHROW(LocateZipException, ("Can't get file name inside zip", zipContainer)); + + filesList.push_back(fileName); + + } while (UNZ_OK == unzGoToNextFile(zip)); + + return filesList; +} |