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);
>> file.seek(coffset, 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 = file.seek(0, 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!

Milan


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net