C++ 将数据写成压缩文件
时间: 2024-02-21 18:57:59 浏览: 179
c++文件压缩
要将数据写成压缩文件,可以使用 C++ 标准库中的压缩库 zlib。
以下是一个将数据压缩并写入文件的示例代码:
```cpp
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <cstring>
#include <zlib.h>
int main() {
std::string data = "Hello, world!"; // 要压缩的数据
std::string filename = "compressed.bin"; // 压缩后的文件名
// 初始化 zlib 压缩流
z_stream stream;
memset(&stream, 0, sizeof(stream));
deflateInit(&stream, Z_DEFAULT_COMPRESSION);
// 创建输出文件流
std::ofstream outfile(filename, std::ios::binary);
// 压缩并写入数据
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;
}
```
上述代码中,使用 `zlib` 库中的 `deflateInit()` 函数初始化了一个压缩流 `stream`,默认压缩级别为 `Z_DEFAULT_COMPRESSION`。
然后,将要压缩的数据设置为 `stream.next_in`,并将 `stream.avail_in` 设置为数据大小。之后,使用 `deflate()` 函数进行压缩,并将压缩后的数据写入输出文件流中。最后,使用 `deflateEnd()` 函数结束压缩流。
需要注意的是,压缩后的数据可能比原始数据更大,因此在写入文件时需要使用二进制模式打开输出文件流,并且需要在写入文件前确定文件的大小。
阅读全文