91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

浑源县| 兰坪| 三原县| 铁岭市| 佛学| 竹溪县| 河北区| 盐亭县| 新闻| 霸州市| 安达市| 柘城县| 贵港市| 新津县| 凭祥市| 上杭县| 修武县| 定远县| 房山区| 化州市| 马鞍山市| 中阳县| 秀山| 延安市| 响水县| 马关县| 许昌县| 通渭县| 阳曲县| 利津县| 九龙城区| 祁连县| 克什克腾旗| 兴国县| 沅江市| 台江县| 鄯善县| 商洛市| 屏东市| 河北区| 甘德县|