在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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。