On Fri, Apr 8, 2011 at 7:43 AM, Jeff Flinn <TriumphSprint2000@hotmail.com>wrote:
Anders Knudby wrote:
Many thanks for the quick response. And apologies for being a total newbie, but how do I close the stream (and how do I check that it has been closed)? With normal iostreams I would just write "out.close();", out being the name of the stream. But that doesn't seem to be the way to do it for filtering_iostreams?!? And I would think it would close when it goes out of scope, but I haven't checked. Any help appreciated. I'm pleased it worked for you on Linux, but I'm largely stuck with Windows for the time being...
Can you post a complete small example demonstrating the problem? The destructor should close the stream. The docs for iostreams::stream shows a close method at http://www.boost.org/doc/libs/1_46_1/libs/iostreams/doc/index.html.
Please don't top post.
Jeff
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
Ok, here's my entire script. As mentioned in the comments it works fine if size=5e5. It also runs fine if size=5e6, but then the resulting file is corrupt (i.e. cannot be gunzipped with the gzip utility). Try it out. I'm using Visual Studio 2008 in a Windows XP machine. #include <boost/iostreams/device/file.hpp> #include <boost/iostreams/filter/gzip.hpp> #include <boost/iostreams/filtering_stream.hpp> using namespace std; namespace io = boost::iostreams; int main() { //Set filename string outfile = "c:/outfile.bin.gz"; //Set filesize int size = int(5e6); // <- If I change this to '5e5' instead of '5e6', everything works just fine. //Declare memory block to be compressed to file char* memblock = new char [size]; //Create a filtering_ostream out io::filtering_ostream out; //Assigns the gzip_compressor to out out.push(io::gzip_compressor()); //Assigns out as a file sink out.push(io::file_sink(outfile)); //Write memblock to out out.write(memblock, size); //Clean up delete[] memblock; io::close(out); //Note, also tried 'out.close();', 'io::close(out, ios_base::out);' and 'close(out);'. Same result. return 0; } -- Anders Knudby