要在C++中實現多線程壓縮可以使用Minizip庫結合C++的多線程庫(如std::thread)來實現。以下是一個簡單的示例代碼:
#include <iostream>
#include <thread>
#include "minizip/zip.h"
void compressFile(const std::string& filePath) {
std::string zipFilePath = filePath + ".zip";
zipFile zf = zipOpen(zipFilePath.c_str(), APPEND_STATUS_CREATE);
if (zf == NULL) {
std::cerr << "Error opening zip file " << zipFilePath << std::endl;
return;
}
zip_fileinfo fileinfo;
memset(&fileinfo, 0, sizeof(zip_fileinfo));
zipOpenNewFileInZip(zf, filePath.c_str(), &fileinfo, NULL, 0, NULL, 0, NULL, Z_DEFLATED, Z_DEFAULT_COMPRESSION);
FILE* file = fopen(filePath.c_str(), "rb");
char buffer[1024];
int bytesRead;
while ((bytesRead = fread(buffer, 1, sizeof(buffer), file)) > 0) {
zipWriteInFileInZip(zf, buffer, bytesRead);
}
zipCloseFileInZip(zf);
zipClose(zf);
fclose(file);
std::cout << "File compressed: " << filePath << std::endl;
}
int main() {
std::vector<std::string> files = {"file1.txt", "file2.txt", "file3.txt"};
std::vector<std::thread> threads;
for (const std::string& file : files) {
threads.push_back(std::thread(compressFile, file));
}
for (std::thread& t : threads) {
t.join();
}
return 0;
}
在上面的代碼中,我們首先定義了一個compressFile
函數,該函數用于壓縮一個文件。然后在main
函數中,我們創建了一個文件列表files
,并為每個文件創建一個新的線程來執行compressFile
函數。最后,我們等待所有線程執行完畢。
需要注意的是,在使用Minizip庫時要包含正確的頭文件并鏈接對應的庫文件。在上面的例子中,我們使用了Minizip的zip.h頭文件。您需要根據您的環境和工具鏈做相應的調整。