C++执行ZIP文件解压缩的代码怎么写?
时间: 2024-10-09 14:06:42 浏览: 17
demofolder.zip【C++的Zip压缩解压缩】
5星 · 资源好评率100%
在C++中,直接操作ZIP文件通常需要第三方库的支持,如`zlib`库用于处理压缩数据,而`libarchive`、`unzipper`等库可以提供更高级的功能来读写ZIP文件。以下是使用`libarchive`库的一个简单示例,假设您已经安装了这个库:
```cpp
#include <archive.h>
#include <archive_entry.h>
#include <fcntl.h>
#include <unistd.h>
// 注意:这只是一个基本示例,实际使用时需要错误处理和异常管理
int main(int argc, char* argv[]) {
if (argc != 2) {
std::cerr << "Usage: program.zip archive_file_to_extract" << std::endl;
return 1;
}
struct archive* a = archive_read_new();
if (!archive_read_support_filter_all(a)) {
std::cerr << "Error: Failed to support all filters." << std::endl;
return 1;
}
if (!archive_read_open_filename(a, argv[1], READ_BINARY)) {
std::cerr << "Error: Could not open file " << argv[1] << std::endl;
return 1;
}
int extracted_files = 0;
while (archive_read_next_header(a, &entry) == ARCHIVE_OK) {
char path[PATH_MAX];
if (archive_entry_pathname(entry, path) != ARCHIVE_OK) {
std::cerr << "Error extracting entry: " << archive_error_string(a) << std::endl;
continue;
}
// 创建目录路径,如果不存在
const char* parent_dir = archive_entry_pathname(entry, NULL);
mkdir(parent_dir, 0755);
// 写入提取文件
int fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
if (fd == -1) {
perror("Error opening file");
continue;
}
size_t bytes_written = 0;
if (archive_read_data(a, buffer, BUFFER_SIZE, &bytes_written) != ARCHIVE_OK) {
perror("Error reading data");
close(fd);
continue;
}
write(fd, buffer, bytes_written);
close(fd);
++extracted_files;
}
if (archive_read_end(a) != ARCHIVE_OK) {
std::cerr << "Error: Failed to read the end of the archive." << std::endl;
} else {
std::cout << "Extracted " << extracted_files << " files successfully." << std::endl;
}
archive_read_free(a);
return 0;
}
```
阅读全文