中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++解壓與文件壓縮格式支持

發布時間:2024-10-30 16:34:49 來源:億速云 閱讀:85 作者:小樊 欄目:編程語言

在C++中,可以使用標準庫中的<zip.h>頭文件來處理ZIP文件格式的壓縮和解壓

#include <iostream>
#include <fstream>
#include <vector>
#include <zip.h>

bool zipFile(const std::string& inputFile, const std::string& outputFile) {
    // 打開輸入文件
    std::ifstream inFile(inputFile, std::ios::binary);
    if (!inFile) {
        std::cerr << "Error opening input file: " << inputFile << std::endl;
        return false;
    }

    // 創建一個ZIP歸檔對象
    zip_t archive = zip_open(outputFile.c_str(), ZIP_CREATE | ZIP_EXCL, nullptr);
    if (!archive) {
        std::cerr << "Error creating output file: " << outputFile << std::endl;
        return false;
    }

    // 讀取輸入文件并將其添加到ZIP歸檔中
    zip_source_t source = zip_source_file(archive, inputFile.c_str(), 0, 0);
    if (!source) {
        std::cerr << "Error adding file to archive: " << inputFile << std::endl;
        zip_close(archive);
        return false;
    }

    int result = zip_file_add(archive, "input.txt", source, ZIP_FL_ENC_GUESS);
    if (result < 0) {
        std::cerr << "Error adding file to archive: " << inputFile << std::endl;
        zip_source_free(source);
        zip_close(archive);
        return false;
    }

    // 釋放ZIP歸檔資源
    zip_source_free(source);
    zip_close(archive);

    return true;
}

bool unzipFile(const std::string& inputFile, const std::string& outputFile) {
    // 打開輸入文件
    std::ifstream inFile(inputFile, std::ios::binary);
    if (!inFile) {
        std::cerr << "Error opening input file: " << inputFile << std::endl;
        return false;
    }

    // 創建一個ZIP歸檔對象
    zip_t archive = zip_open(inputFile.c_str(), ZIP_READ, nullptr);
    if (!archive) {
        std::cerr << "Error opening archive: " << inputFile << std::endl;
        return false;
    }

    // 獲取歸檔中的文件數量
    int numFiles = zip_get_num_entries(archive, 0);
    if (numFiles < 0) {
        std::cerr << "Error getting number of files in archive: " << inputFile << std::endl;
        zip_close(archive);
        return false;
    }

    // 遍歷歸檔中的每個文件
    for (int i = 0; i < numFiles; ++i) {
        zip_file_t file = zip_fopen_index(archive, i, 0);
        if (!file) {
            std::cerr << "Error opening file in archive: " << inputFile << std::endl;
            zip_close(archive);
            return false;
        }

        // 獲取文件名
        char filename[256];
        zip_get_name(file, filename, sizeof(filename));

        // 創建輸出文件
        std::ofstream outFile(outputFile + "/" + filename, std::ios::binary);
        if (!outFile) {
            std::cerr << "Error creating output file: " << outputFile + "/" + filename << std::endl;
            zip_fclose(file);
            zip_close(archive);
            return false;
        }

        // 將文件內容復制到輸出文件
        char buffer[4096];
        size_t bytesRead;
        while ((bytesRead = zip_fread(file, buffer, sizeof(buffer))) > 0) {
            outFile.write(buffer, bytesRead);
        }

        // 關閉文件
        zip_fclose(file);
    }

    // 釋放ZIP歸檔資源
    zip_close(archive);

    return true;
}

int main() {
    std::string inputFile = "input.zip";
    std::string outputFile = "output";

    if (zipFile(inputFile, outputFile)) {
        std::cout << "Successfully zipped file: " << inputFile << std::endl;
    } else {
        std::cerr << "Error zipping file: " << inputFile << std::endl;
    }

    if (unzipFile(inputFile, outputFile)) {
        std::cout << "Successfully unzipped file: " << inputFile << std::endl;
    } else {
        std::cerr << "Error unzipping file: " << inputFile << std::endl;
    }

    return 0;
}

這個示例中,zipFile函數用于將一個文件壓縮到ZIP歸檔中,而unzipFile函數用于從ZIP歸檔中解壓縮文件。請注意,這個示例僅支持ZIP文件格式,如果需要支持其他壓縮格式,可以考慮使用第三方庫,如minizipzlib

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

清远市| 嘉荫县| 宁城县| 宜君县| 靖江市| 香河县| 西乌| 平塘县| 永州市| 河池市| 蒲江县| 泰州市| 马边| 大渡口区| 阜阳市| 普兰店市| 财经| 观塘区| 新宁县| 冷水江市| 麻江县| 浙江省| 仁寿县| 盱眙县| 定南县| 田林县| 商南县| 清涧县| 平阳县| 包头市| 乐陵市| 丰镇市| 夏河县| 安陆市| 游戏| 文昌市| 青川县| 黄山市| 阿合奇县| 微博| 连平县|