我试图使用boost库(gzip)压缩文件。 这是一个简单的任务:假设我有文件 data.xml ,我需要将其压缩为 data.xml.gz 。我甚至可以使用默认的压缩值,无所谓。
我试图在google和BOOST页面中查找,但没有成功。
我有以下内容:
bool SyncFrequencyHistory::frequencyHistoryCompressFile(void)
{
printf("\r\n===== ACTION: frequencyHistoryCompressFile =====\r\n");
std::ifstream inStream(FREQUENCY_HISTORY_FILE, std::ios_base::in);
std::ofstream outStream(FREQUENCY_HISTORY_FILE_GZIP, std::ios_base::out);
boost::iostreams::filtering_streambuf<boost::iostreams::output> out;
out.push(boost::iostreams::gzip_compressor());
out.push(outStream);
boost::iostreams::copy(in, out);
return true;
}
FREQUENCY_HISTORY_FILE具有XML文件的完整位置
FREQUENCY_HISTORY_FILE_GZIP拥有XML.GZ文件的完整位置
我知道几乎所有代码都是错误的,但我不知道是谁用正确的方式编写代码。
答案 0 :(得分:1)
根据以下tutorial,我相信您的代码应为:
bool SyncFrequencyHistory::frequencyHistoryCompressFile(void)
{
printf("\r\n===== ACTION: frequencyHistoryCompressFile =====\r\n");
std::ifstream inStream(FREQUENCY_HISTORY_FILE, std::ios_base::in);
std::ofstream outStream(FREQUENCY_HISTORY_FILE_GZIP, std::ios_base::out);
boost::iostreams::filtering_streambuf< boost::iostreams::input> in;
in.push( boost::iostreams::gzip_compressor());
in.push( inStream );
boost::iostreams::copy(in, outStream);
return true;
}
基本上,您读取输入,压缩输入并保存数据
答案 1 :(得分:1)
我已经解决了!我改为ZLIB库。
#include <zlib.h>
(...)
gzFile fi = gzopen(FILENAME,"wb");
gzprintf(fi,"This is a string"\r\n");
gzclose(fi);
答案 2 :(得分:1)
此代码有效,您只需要为输出流指定二进制类型:std::ios_base::binary
。