温馨提示×

如何结合C++ File类进行文件压缩

c++
小樊
83
2024-08-19 19:50:33
栏目: 编程语言

在C++中,可以使用File类结合压缩库(如zlib)来实现文件压缩。以下是一个简单的示例代码来演示如何在C++中通过File类进行文件压缩:

#include <iostream>
#include <fstream>
#include <zlib.h>

int main() {
    // 打开需要压缩的文件
    std::ifstream inputFile("inputfile.txt", std::ios::binary);
    if (!inputFile.is_open()) {
        std::cerr << "Failed to open input file\n";
        return 1;
    }

    // 打开压缩后的文件
    std::ofstream compressedFile("compressedfile.gz", std::ios::binary);
    if (!compressedFile.is_open()) {
        std::cerr << "Failed to create compressed file\n";
        return 1;
    }

    // 设置zlib参数
    z_stream defstream;
    defstream.zalloc = Z_NULL;
    defstream.zfree = Z_NULL;
    defstream.opaque = Z_NULL;
    defstream.avail_in = 0;
    defstream.next_in = Z_NULL;
    if (deflateInit(&defstream, Z_BEST_COMPRESSION) != Z_OK) {
        std::cerr << "Failed to initialize zlib\n";
        return 1;
    }

    // 压缩文件
    char buffer[1024];
    int ret;
    do {
        inputFile.read(buffer, sizeof(buffer));
        defstream.avail_in = inputFile.gcount();
        defstream.next_in = (Bytef *)buffer;
        do {
            defstream.avail_out = sizeof(buffer);
            defstream.next_out = (Bytef *)buffer;
            ret = deflate(&defstream, Z_FINISH);
            compressedFile.write(buffer, sizeof(buffer) - defstream.avail_out);
        } while (defstream.avail_out == 0);
    } while (ret != Z_STREAM_END);

    // 关闭文件和压缩流
    deflateEnd(&defstream);
    inputFile.close();
    compressedFile.close();

    std::cout << "File compressed successfully\n";

    return 0;
}

在这个示例中,首先打开需要压缩的文件inputfile.txt和压缩后的文件compressedfile.gz,然后初始化zlib参数并进行文件压缩操作。最后关闭文件和压缩流。

请注意,这只是一个简单的示例,实际使用中需要考虑更多异常情况和错误处理。

0