您好,登錄后才能下訂單哦!
在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
目錄中。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。