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

溫馨提示×

溫馨提示×

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

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

C++解壓與文件壓縮比

發布時間:2024-10-30 12:54:42 來源:億速云 閱讀:88 作者:小樊 欄目:編程語言

在C++中,可以使用標準庫中的<zip.h><zlib.h>頭文件來實現文件的壓縮和解壓功能。這兩個庫分別提供了ZIP和gzip格式的壓縮算法支持。

首先,需要安裝相應的庫文件。對于ZIP格式,可以使用libzip庫;對于gzip格式,可以使用zlib庫。在Linux系統中,可以使用包管理器安裝這些庫,例如在Ubuntu系統中,可以使用以下命令安裝:

sudo apt-get install libzip-dev zlib1g-dev

接下來,可以編寫C++代碼來實現文件的壓縮和解壓功能。以下是一個簡單的示例:

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

void compressFile(const std::string& inputFilePath, const std::string& outputZipFilePath) {
    zipFile zipFile = zip_open(outputZipFilePath.c_str(), ZIP_CREATE | ZIP_TRUNCATE, nullptr);
    if (zipFile == nullptr) {
        std::cerr << "Error opening zip file: " << outputZipFilePath << std::endl;
        return;
    }

    std::ifstream inputFile(inputFilePath, std::ios::binary);
    if (!inputFile) {
        std::cerr << "Error opening input file: " << inputFilePath << std::endl;
        zip_close(zipFile);
        return;
    }

    std::vector<char> buffer(4096);
    int bytesRead;
    while ((bytesRead = inputFile.read(buffer.data(), buffer.size())) > 0) {
        zip_source_t* source = zip_source_buffer(zipFile, buffer.data(), bytesRead, 0);
        if (source == nullptr) {
            std::cerr << "Error creating zip source: " << inputFilePath << std::endl;
            zip_close(zipFile);
            return;
        }

        if (zip_file_add(zipFile, "input.txt", source, ZIP_FL_ENC_GUESS) < 0) {
            std::cerr << "Error adding file to zip archive: " << inputFilePath << std::endl;
            zip_source_free(source);
            zip_close(zipFile);
            return;
        }

        zip_source_free(source);
    }

    if (zip_close(zipFile) < 0) {
        std::cerr << "Error closing zip file: " << outputZipFilePath << std::endl;
    }
}

void decompressFile(const std::string& zipFilePath, const std::string& outputFilePath) {
    zipFile zipFile = zip_open(zipFilePath.c_str(), ZIP_READ, nullptr);
    if (zipFile == nullptr) {
        std::cerr << "Error opening zip file: " << zipFilePath << std::endl;
        return;
    }

    if (zip_file_go_to_first_entry(zipFile) < 0) {
        std::cerr << "Error entering zip archive: " << zipFilePath << std::endl;
        zip_close(zipFile);
        return;
    }

    do {
        const char* entryName = zip_get_name(zipFile, 0);
        if (entryName == nullptr) {
            std::cerr << "Error getting zip entry name: " << zipFilePath << std::endl;
            zip_close(zipFile);
            return;
        }

        std::string outputFilePathWithEntryName = outputFilePath + "/" + entryName;
        std::ofstream outputFile(outputFilePathWithEntryName, std::ios::binary);
        if (!outputFile) {
            std::cerr << "Error opening output file: " << outputFilePathWithEntryName << std::endl;
            zip_close(zipFile);
            return;
        }

        zip_source_t* source = zip_source_file(zipFile, entryName, 0, 0);
        if (source == nullptr) {
            std::cerr << "Error creating zip source: " << zipFilePath << std::endl;
            zip_close(zipFile);
            return;
        }

        char buffer[4096];
        int bytesRead;
        while ((bytesRead = zip_source_read(source, buffer, sizeof(buffer))) > 0) {
            outputFile.write(buffer, bytesRead);
        }

        zip_source_free(source);

        if (zip_file_goto_next_entry(zipFile) < 0) {
            std::cerr << "Error entering next zip entry: " << zipFilePath << std::endl;
        }
    } while (zip_file_go_to_next_entry(zipFile) >= 0);

    if (zip_close(zipFile) < 0) {
        std::cerr << "Error closing zip file: " << zipFilePath << std::endl;
    }
}

int main() {
    std::string inputFilePath = "input.txt";
    std::string outputZipFilePath = "output.zip";
    compressFile(inputFilePath, outputZipFilePath);

    std::string outputDecompressedFilePath = "output_decompressed";
    decompressFile(outputZipFilePath, outputDecompressedFilePath);

    return 0;
}

在這個示例中,compressFile函數用于壓縮文件,decompressFile函數用于解壓ZIP文件。注意,這個示例僅支持ZIP格式的壓縮和解壓。如果需要支持gzip格式,可以使用zlib庫提供的函數來實現。

關于文件壓縮比,它是指原始文件大小與壓縮后文件大小之比。壓縮比越大,表示壓縮效果越好。不同的壓縮算法和參數設置會影響壓縮比和壓縮速度。在實際應用中,可以根據需求選擇合適的壓縮算法和參數。

向AI問一下細節

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

c++
AI

襄城县| 南城县| 伊宁市| 赞皇县| 黄山市| 永登县| 泸西县| 丹巴县| 罗甸县| 延寿县| 且末县| 江源县| 博客| 分宜县| 辽源市| 包头市| 磴口县| 定西市| 壤塘县| 富裕县| 信宜市| 沙湾县| 宁都县| 新密市| 聊城市| SHOW| 铜川市| 长泰县| 文水县| 乌鲁木齐县| 南皮县| 儋州市| 林芝县| 班玛县| 资源县| 广平县| 大连市| 石楼县| 柳林县| 彩票| 隆昌县|