Boost logo

Boost Users :

Subject: Re: [Boost-users] [boost::iostreams] How to get number of bytes written?
From: Milan Svoboda (milan.svoboda_at_[hidden])
Date: 2008-11-28 03:49:42

eg wrote:

> Milan Svoboda wrote:
>> Hi All,
>> I'm using boost::iostreams and its filters to compress and decompress
>> data. However I'm not able to retrieve number of bytes really written
>> (number of bytes after a compression).
>> Does anybody know how to do that?
>> I'm currently using following code:
>> coffset if offset to where start with writing of compressed data and
>> after call it shall contain the length of the file. This works good to
>> get length of the compressed block unless block of data is written
>> somewhere in the middle of the file thus end of file is not the same as
>> the last offset where compressed data has been written to.
>> io::file_descriptor file(fd);
>>, ios_base::beg);
>> {
>> io::filtering_ostream out;
>> // Push the compression filter (bl->type.push(out);)
>> out.push(file);
>> io::write(out, buf, length);
>> // Destroying the object 'out' causes all filters to
>> // flush.
>> }
>> // Update raw length of the file.
>> //
>> coffset =, ios_base::end);
> Maybe I dont quite understand the problem...

I need to know number of bytes after compression. boost::iostreams::write
returns number of bytes that has been passed to filter but there is no direct
way to get number of bytes that filter returned...

> Could you just write a simple pass-through filter which counts the bytes
> only? Something like:
> io::filtering_ostream out;
> out.push(compressor());
> out.push(passthru()); // <- this just counts bytes
> out.push(file_sink("my_file.txt"));

Great! This looks like a right way. Thank you!


Boost-users list run by williamkempf at, kalb at, bjorn.karlsson at, gregod at, wekempf at