Hi Folks - I'm working on a mod to an
existing program to write compressed output files. The following
code works fine, but if I put the indicated code in a function, it drops
core when I attempt to write to the ofile ostream - presumably because
the filtering_streambuf<output> out was allocated on the stack and
no longer exists after the function exits.
#include <fstream>
#include <iostream>
#include <string>
#include <boost/iostreams/filtering_streambuf.hpp>
#include <boost/iostreams/filter/bzip2.hpp>
using namespace std;
using namespace boost::iostreams;
using namespace boost::iostreams::bzip2;
int main()
{
string x;
fstream infile;
infile.open("00011.eph.org",
ios::in);
ostream *ofile;
//******* To be put in function ************************
fstream *file2;
file2 = new fstream;
file2->open("00011.eph.org.bz2",
ios_base::out | ios_base::binary);
filtering_streambuf<output>
out;
out.push(bzip2_compressor());
out.push(*file2);
ofile = new ostream(&out);
//******* To be put in function ************************
while(!infile.eof())
{
getline(infile,
x);
*ofile <<
x << endl;
}
return 0;
}
//*****************************************************************************
Now if I attempt to dynamically allocate
the filtering_streambuf.
#include <fstream>
#include <iostream>
#include <string>
#include <boost/iostreams/filtering_streambuf.hpp>
#include <boost/iostreams/filter/bzip2.hpp>
using namespace std;
using namespace boost::iostreams;
using namespace boost::iostreams::bzip2;
int main()
{
string x;
fstream infile;
infile.open("00011.eph.org",
ios::in);
ostream *ofile;
//******* To be put in function ************************
fstream *file2;
file2 = new fstream;
file2->open("00011.eph.org.bz2",
ios_base::out | ios_base::binary);
filtering_streambuf<output>
*out;
out = new filtering_streambuf<output>;
out->push(bzip2_compressor());
out->push(*file2);
ofile = new ostream(out);
//******* To be put in function ************************
while(!infile.eof())
{
getline(infile,
x);
*ofile <<
x << endl;
}
return 0;
}
This code compiles and runs fine, but
the compressed output file, 00011.eph.org.bz2, ends up empty. Moving
the indicated code to a function again works fine - but again, no output??
The reasoning for all this is that I'd
like to be able to open and set up the various output streams in a function,
and then pass those streams around as needed. Which means they need
to be dynamically allocated/built on the heap. But it's not working??
Ideas? What am I missing here?
Thanks
Eric