On 8/9/07, François Duranleau
On Thu, 9 Aug 2007, Robert Caldecott wrote:
I have been experimenting with the boost::iostreams to create a gzip file, for example the following works fine:
using namespace boost::iostreams; filtering_ostream out; out.push(gzip_compressor()); out.push(file_sink("test.gz", std::ios::binary)); out << "This is a gz file\n";
This will create a gz file containing a single compressed file (called 'test'). I can change the name of this internal file using a gzip_params struct and all is well.
However, I want to create a single gzip file that contains multiple compressed files, each with a different filename. Does anyone know how to achieve this?
I guess that when you uncompress the file (e.g. with gunzip), you want to get all those named files in, well, different files? As far as I know, the gzip format doesn't allow that (I could be wrong), hence the gzip'ed tar files we often see. I can't think of any simple portable solution aside from creating each file regularly and then calling
system("tar zcf filename.tar.gz ...");
and finally remove the uncompressed files. That would require that 'tar' is available the system your software is run on.
Anyone else has any better ideas?
Read the tar specs and write the code to generate headers/tailers yourself. It's probably quite simple, especially the writing part.