file compression using zlib - c

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?.

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.

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

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.

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

Related

How to compile a precompiled ".dll" SQLite file and get a ".exe" file for it's installation?

This is the page ref from where I am asked to download SQLite
I am not getting a ".exe" installer file in the zip file which is getting downloaded. How do I compile the precompiled ".dll" file so that I get the desired ".exe" file for installing SQLite Software?
Any solutions? As I am a rookie, I would like to get a solution in layman words.
SC of the files that I am getting after unzipping

Static library header file

I am trying to import a static library based on Hierarchical Matrices (H2Lib). The folder contains a make file which compiles the library files, examples and tests into a single .a file. I have referred to tutorials on creating and using static libraries in C using archiver command line in Linux but this does not create a header file, which I had to create manually while working out the tutorial. The H2Lib has multiple files and it would be difficult and time consuming to create a header file manually for this. I am not sure if I am missing something here or doing something wrong; I am new to the concept of libraries in C. Can some one please help me on how to use this library in C?
P.S: git repository link for H2Lib: https://github.com/H2Lib/H2Lib/tree/master
You are not supposed to write the header files yourself. Somewhere on the folder where the library is defined there should be a directory with multiple .h files (the headers) (it's usually named include).
What you need to do is include them into your project. You do this by appending -I to the path of each folder containing the headers and then writing #include "headername.h" in your source code.
So if the headers are in dir/include, you'd do:
gcc yourfiles.c <flags> output.o -I dir/include

How to download all header files in the link given?

I want to download all the files under this directory
link containing .h and .c files
How can I download all files in one go? as a tar file or any other format with the same hierarchy structure of files?

How to determine DOCX file and PPTX file?

I try to read the file header DOCX files and PPTX files to determine if two files, but the two files have the same header.
How can I distinguish PPTX and DOCX.

Which zlib functions are compatible with WinZip?

Using deflate() I was unable to open the zipped file using WinZip. Are the gz() the only ones compatible with WinZip? or is there some sort of mode I must call deflate() with?
from http://www.zlib.net/zlib_faq.html
Can zlib handle .zip archives?
Not by
itself, no. See the directory
contrib/minizip in the zlib
distribution.
zlib only implements the used compression algorithm, not the ZIP file structure. You need to parse the ZIP file yourself and then you can decompress the file chunks with zlib.
Note, that there is no gzip header in the file chunks, so you need to do a "raw inflate". Check the zlib documentation for more details.

Resources