我正在使用以下代码将文件压缩为gzip文件。 创建的gzip文件已损坏
gzip -t:
invalid compressed data--crc error
我在做什么错了?
const char *filename = "/home/username/Desktop/temp/data.csv";
const char *gzFilename = "/home/username/Desktop/temp/data.csv.gz";
std::ifstream inStream(filename, std::ios_base::in);
std::ofstream outStream(gzFilename, std::ios_base::out | std::ios_base::binary);
boost_io::filtering_streambuf<boost_io::input> compressingBuf;
compressingBuf.push(boost_io::gzip_compressor());
compressingBuf.push(inStream);
boost_io::copy(compressingBuf, outStream);
答案 0 :(得分:0)
根据您的实际情况,您可能需要显式刷新/关闭输出。
而且,从直觉上来说,考虑输出链的压缩部分对我来说更有意义。这样,如果对输出进行多次写入,您将获得一致的行为,而不必冒险编写未经压缩的部分。
这是我的改写,添加了一些样式元素:
std::ios
标志std::string const filename = "/home/username/Desktop/temp/data.csv";
{
std::ofstream outStream(filename + ".gz", std::ios::binary);
boost_io::filtering_ostreambuf compressingBuf;
compressingBuf.push(boost_io::gzip_compressor());
compressingBuf.push(outStream);
{
std::ifstream inStream(filename);
copy(inStream, compressingBuf);
outStream.flush();
}
}