1
votes

Can i use the zlib library function to compress files. I try to do a file compression using "gzopen()" which is actually working with single file with some problems. When i try to decompress the output file using "WinZip" the file extension is not present in the output. For eg. If I compress a file named "test.pdf", the output file name is coming as "test". (the file content is proper. only problem is with the extension)

     fi = (gzFile *)gzopen(destfile,"ab");
     gzwrite(fi,buff,bufflen);
     gzclose(fi);

When i try to compress two different file(eg "test.pdf" and "sample.pdf") only one file came after extraction using "WinZip"("test"). How to use the zlip file to compress more than one file. I think the problem is with header information in the compressed file. Can i use zlib to compress files?.

4

4 Answers

3
votes

You can use the -N or --name option to gzip to have it use the filename stored in the gzip file instead of the name of the gzip file.

You cannot use gzip by itself to store multiple files. For a Windows application, I would recommend libzip for multiple files, which encodes and decodes .zip files. libzip uses zlib for the compression and decompression part.

1
votes

you could use something like http://gnuwin32.sourceforge.net/packages/libarchive.htm to create a tar and the zip it

1
votes

zlib (the library) and gzip (the utility) doesn't really do any file management. It doesn't have any concept of file names, so normally the gunzip utility just removes the .gz extension from an extracted file. There is no filename data embedded in the gzipped file, it just works off the filename at the time you unzip it.

gzip also doesn't support compressing multiple files together into the same archive. To do that usually you use the tar command to create one file that contains the individual files you want to compress, then gzip the tar file. that's why you'll see archive.tar.gz or archive.tgz a lot. It's a bunch of files in a tar file which has been compressed with gzip.

0
votes

zlib only does comression it doesn't handle file names, file data, directory layout etc.

Winzip adds all these to the ZLIB protocol. In the zlib distribution there is a contrib library that gives you zip functions