C++解压库使用案例

发布时间:2024-10-30 14:10:46 作者:小樊
来源:亿速云 阅读:80

在C++中,我们可以使用第三方库来处理ZIP文件

首先,确保已经安装了minizip库。接下来,我们将创建一个简单的C++程序来解压缩一个ZIP文件。

#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include "minizip/unzip.h"
#include "minizip/zip.h"

void UnzipFile(const std::string& zipFilePath, const std::string& outputDir) {
    unzFile uf = unzOpen(zipFilePath.c_str());
    if (uf == nullptr) {
        std::cerr << "Error opening ZIP file: " << zipFilePath << std::endl;
        return;
    }

    int ret;
    char buffer[4096];
    unz_global_info gi;
    ret = unzGetGlobalInfo(uf, &gi);
    if (ret != UNZ_OK) {
        std::cerr << "Error getting global info: " << zipFilePath << std::endl;
        unzClose(uf);
        return;
    }

    std::vector< unz_file_info> file_info(gi.number_entry);
    ret = unzGetInfoArray(uf, file_info.data(), gi.number_entry);
    if (ret != UNZ_OK) {
        std::cerr << "Error getting file info array: " << zipFilePath << std::endl;
        unzClose(uf);
        return;
    }

    for (size_t i = 0; i < gi.number_entry; ++i) {
        unz_file_info fi = file_info[i];
        std::string filename(fi.filename);
        std::string fullpath = outputDir + "/" + filename;

        if (fi.uncompressed_size > 0) {
            std::ofstream outputFile(fullpath, std::ios::binary);
            if (!outputFile) {
                std::cerr << "Error creating output file: " << fullpath << std::endl;
                continue;
            }

            char* buffer = new char[fi.uncompressed_size];
            ret = unzReadCurrentFile(uf, buffer, fi.uncompressed_size);
            if (ret != UNZ_OK) {
                std::cerr << "Error reading file: " << filename << std::endl;
                delete[] buffer;
                continue;
            }

            outputFile.write(buffer, fi.uncompressed_size);
            delete[] buffer;

            if (!outputFile) {
                std::cerr << "Error writing to output file: " << fullpath << std::endl;
            }
        } else {
            std::ifstream inputFile(fullpath, std::ios::binary);
            if (!inputFile) {
                std::cerr << "Error opening existing file: " << fullpath << std::endl;
                continue;
            }

            inputFile.close();
        }
    }

    unzClose(uf);
}

int main() {
    std::string zipFilePath = "example.zip";
    std::string outputDir = "output";

    UnzipFile(zipFilePath, outputDir);

    std::cout << "Unzip completed!" << std::endl;

    return 0;
}

在这个示例中,我们定义了一个名为UnzipFile的函数,它接受一个ZIP文件路径和一个输出目录作为参数。我们使用minizip库打开ZIP文件,获取文件信息,然后遍历所有文件并将它们解压缩到指定的输出目录。

main函数中,我们调用UnzipFile函数来解压缩一个名为example.zip的文件,并将解压缩的文件保存到名为output的目录中。

要编译这个程序,请确保链接minizip库。例如,使用g++编译器,你可以这样编译:

g++ -o unzip_example example.cpp -lminizip -lz

然后运行生成的可执行文件:

./unzip_example

这将解压缩example.zip文件并将解压缩的文件保存到output目录中。

推荐阅读:
  1. C++指针函数如何高效使用
  2. 指针函数在C++中的关键作用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++

上一篇:C++解压与文件权限变更

下一篇:C++解压与文件类型识别

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》