您好,登錄后才能下訂單哦!
在C++中,可以使用第三方庫如zlib或minizip來實現文件壓縮和解壓縮功能。以下是一個簡單的示例代碼,展示了如何使用minizip庫來實現文件的壓縮和解壓縮:
#include <iostream>
#include "minizip/zip.h"
#include "minizip/unzip.h"
void compressFile(const std::string& filePath) {
zipFile zf = zipOpen((filePath + ".zip").c_str(), APPEND_STATUS_CREATE);
if (zf == NULL) {
std::cerr << "Error opening zip file" << std::endl;
return;
}
zip_fileinfo zi = {};
zipOpenNewFileInZip(zf, (filePath + ".txt").c_str(), &zi, NULL, 0, NULL, 0, NULL, Z_DEFLATED, Z_DEFAULT_COMPRESSION);
FILE* file = fopen(filePath.c_str(), "rb");
if (file == NULL) {
std::cerr << "Error opening file" << std::endl;
zipClose(zf, NULL);
return;
}
char buf[1024];
int len;
while ((len = fread(buf, 1, sizeof(buf), file)) > 0) {
zipWriteInFileInZip(zf, buf, len);
}
fclose(file);
zipCloseFileInZip(zf);
zipClose(zf, NULL);
std::cout << "File compressed successfully" << std::endl;
}
void decompressFile(const std::string& zipFilePath) {
unzFile uf = unzOpen(zipFilePath.c_str());
if (uf == NULL) {
std::cerr << "Error opening zip file" << std::endl;
return;
}
unz_file_info fi = {};
unzGetCurrentFileInfo(uf, &fi, NULL, 0, NULL, 0, NULL, 0);
unzOpenCurrentFile(uf);
char buf[1024];
FILE* file = fopen("output.txt", "wb");
if (file == NULL) {
std::cerr << "Error opening file" << std::endl;
unzCloseCurrentFile(uf);
unzClose(uf);
return;
}
int len;
while ((len = unzReadCurrentFile(uf, buf, sizeof(buf))) > 0) {
fwrite(buf, 1, len, file);
}
fclose(file);
unzCloseCurrentFile(uf);
unzClose(uf);
std::cout << "File decompressed successfully" << std::endl;
}
int main() {
compressFile("test.txt");
decompressFile("test.txt.zip");
return 0;
}
在上面的示例中,compressFile()
函數用于壓縮文件,decompressFile()
函數用于解壓縮文件。需要注意的是,示例中使用的是minizip庫,需要提前下載并編譯該庫。壓縮和解壓縮文件的過程都是通過minizip庫提供的接口函數來實現的。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。