请用c++重新展示修改后的完整代码
时间: 2023-10-08 07:07:44 浏览: 87
当然,以下是修改后的完整C++代码:
```cpp
#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
#include <sstream>
#include <algorithm>
#include <stdexcept>
#include <cstdio>
#include <cstdlib>
#include <unistd.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <zlib.h>
using namespace std;
// 压缩文件
void CompressFile(const string& input_path, const string& output_path) {
// 打开输入文件
int input_fd = open(input_path.c_str(), O_RDONLY);
if (input_fd == -1) {
throw runtime_error("Failed to open input file.");
}
// 打开输出文件
gzFile output_file = gzopen(output_path.c_str(), "wb");
if (output_file == NULL) {
throw runtime_error("Failed to open output file.");
}
// 压缩数据
char buffer[1024];
int bytes_read = 0;
while ((bytes_read = read(input_fd, buffer, 1024)) > 0) {
gzwrite(output_file, buffer, bytes_read);
}
// 关闭文件
close(input_fd);
gzclose(output_file);
}
// 解压文件
void DecompressFile(const string& input_path, const string& output_path) {
// 打开输入文件
gzFile input_file = gzopen(input_path.c_str(), "rb");
if (input_file == NULL) {
throw runtime_error("Failed to open input file.");
}
// 打开输出文件
int output_fd = open(output_path.c_str(), O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
if (output_fd == -1) {
throw runtime_error("Failed to open output file.");
}
// 解压数据
char buffer[1024];
int bytes_written = 0;
while ((bytes_written = gzread(input_file, buffer, 1024)) > 0) {
write(output_fd, buffer, bytes_written);
}
// 关闭文件
close(output_fd);
gzclose(input_file);
}
int main() {
string input_path, output_path;
cout << "请输入需要压缩/解压的文件路径:";
cin >> input_path;
if (input_path.size() >= 3 && input_path.substr(input_path.size() - 3, 3) == ".gz") {
// 解压文件
output_path = input_path.substr(0, input_path.size() - 3);
DecompressFile(input_path, output_path);
cout << "解压缩完成,文件保存在:" << output_path << endl;
} else {
// 压缩文件
output_path = input_path + ".gz";
CompressFile(input_path, output_path);
cout << "压缩完成,文件保存在:" << output_path << endl;
}
return 0;
}
```
您可以在命令行中运行该程序,并按照提示输入需要压缩/解压缩的文件路径。程序会根据文件后缀自动判断是进行压缩还是解压缩,并输出结果并保存文件到指定路径。希望这个修改后的代码能够帮到您。
阅读全文