3

我正在尝试使用 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 文件的完整位置

我知道几乎所有代码都是错误的,但我不知道谁以正确的方式编写它。

4

3 回答 3

3

根据以下教程,我相信您的代码应该是:

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;
}

基本上,你读取输入,压缩它并保存数据

于 2013-07-03T16:00:10.100 回答
3

I already solved it! I changed to ZLIB library.

#include <zlib.h>

(...)

gzFile fi = gzopen(FILENAME,"wb");
gzprintf(fi,"This is a string"\r\n");
gzclose(fi);
于 2013-07-10T09:00:29.083 回答
1

此代码有效,您只需要为输出流指定二进制类型:std::ios_base::binary.

于 2016-11-01T10:08:31.260 回答