C++ 将数据写成压缩文件.gz
时间: 2023-12-08 12:04:09 浏览: 264
c++文件压缩
要将数据写成压缩文件 `.gz`,可以使用 C++ 标准库中的压缩库 zlib 和 IO 库 gzip。
以下是一个将数据压缩并写入 `.gz` 文件的示例代码:
```cpp
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <cstring>
#include <zlib.h>
#include <gzstream.h>
int main() {
std::string data = "Hello, world!"; // 要压缩的数据
std::string filename = "compressed.gz"; // 压缩后的文件名
// 创建输出文件流
ogzstream outfile(filename.c_str(), std::ios::binary);
// 初始化 zlib 压缩流
z_stream stream;
memset(&stream, 0, sizeof(stream));
deflateInit2(&stream, Z_DEFAULT_COMPRESSION, Z_DEFLATED, 16+MAX_WBITS, 8, Z_DEFAULT_STRATEGY);
// 压缩并写入数据
stream.next_in = (Bytef*)data.c_str();
stream.avail_in = data.size();
int flush = Z_FINISH;
int ret;
do {
char out[1024];
stream.next_out = (Bytef*)out;
stream.avail_out = sizeof(out);
ret = deflate(&stream, flush);
outfile.write(out, sizeof(out) - stream.avail_out);
} while (stream.avail_out == 0);
deflateEnd(&stream);
// 关闭文件流
outfile.close();
std::cout << "Data compressed and written to file: " << filename << std::endl;
return 0;
}
```
上述代码中,使用 IO 库中的 `ogzstream` 类创建了一个输出文件流 `outfile`,文件名为 `compressed.gz`。之后,初始化了一个压缩流 `stream`,使用 `deflateInit2()` 函数,其中 `16+MAX_WBITS` 表示使用 gzip 格式进行压缩。
然后,将要压缩的数据设置为 `stream.next_in`,并将 `stream.avail_in` 设置为数据大小。之后,使用 `deflate()` 函数进行压缩,并将压缩后的数据写入输出文件流中。最后,使用 `deflateEnd()` 函数结束压缩流。
需要注意的是,压缩后的数据可能比原始数据更大,因此在写入文件时需要使用二进制模式打开输出文件流,并且需要在写入文件前确定文件的大小。同时,需要在程序中包含 IO 库 gzip 的头文件 `gzstream.h`。
阅读全文