zlib c++ and extracting files

北慕城南 提交于 2020-01-12 05:24:09

问题


I have started to use zlib 1.2.5 and I do not see any routine to extract from a zip file? I read about a minizip application, part of the distribution.

Is that how it is supposed to be done?


回答1:


Yes, it does it well. (But if ever you don't like C code, you should look at 7-zip SDK that have code in C++ and C#.)

  • All the functions to browse and uncompress the files from a zip archive are in unzip.h
  • All the functions to compress and add files to a zip archive are in zip.h

(look at contrib\minizip\unzip.h and contrib\minizip\zip.h)

For example, decompressing: the unzOpen() functions of your zip file returns a unzFile

then use unzGoToFirstFile() and unzGoToNextFile() on this unzFile to browse through all files in the archive.

then you get the file info for each file with unzGetCurrentFileInfo(), namely for its size,

surely you should call unzOpenCurrentFile() at some moment.

and call unzReadCurrentFile() using the size from file info, retrieving the binary content of the archived file.

optionally, there is an opaque structure you can provide so as to use your own i/o function, but obviously, there is a default win32 implementation for file access, so you could even not worry about that.

PS: and dont forget to call unzCloseCurrentFile().




回答2:


From: http://www.zlib.net/zlib_faq.html#faq11 : 11. Can zlib handle .zip archives?

Not by itself, no. See the directory contrib/minizip in the zlib distribution.

There's not a tutorial there but the minizip zip.c source is exactly for IO (so presumably compression and decompression) on zip files using zlib.

And still no tutorial BUT http://www.winimage.com/zLibDll/minizip.html gives more details.




回答3:


I have built a wrapper around minizip adding some features that I needed and making it nicer to use it. Is does use the latest c++11 and is developed using Visual Studio 2013 (should be portable, but I haven't tested it on unix)

There's a full description here: https://github.com/sebastiandev/zipper

you can zip entire folders, streams, vectors, etc. Also a nice feature is doing everything entirely in memory.



来源:https://stackoverflow.com/questions/4696907/zlib-c-and-extracting-files

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!