亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

犍为县| 沁阳市| 崇明县| 柘荣县| 慈溪市| 大城县| 肃北| 保亭| 富平县| 新竹县| 綦江县| 武功县| 郯城县| 卓尼县| 新安县| 娱乐| 泾川县| 塔河县| 江津市| 庆元县| 开远市| 石家庄市| 湖口县| 陇川县| 于田县| 肃南| 清苑县| 和龙市| 敦化市| 新乡县| 自治县| 建始县| 林口县| 肃北| 汉阴县| 庆云县| 体育| 股票| 广德县| 辛集市| 临沂市|