编写一个程序,可以在命令行输入参数,完成指定文件的压缩解压,命令行参数如下: rle file1 –c(-d) file2 第一个参数为可执行程序名称,第二个参数为原始文件名,第三个参数为压缩或解压缩选项,第四个参数为新文件名C语言
时间: 2024-02-29 08:51:57 浏览: 74
好的,让我来为您编写这个程序。以下是程序代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void compress(FILE* inputFile, FILE* outputFile) {
int count = 1;
char currentChar, nextChar;
fread(¤tChar, sizeof(char), 1, inputFile);
while (fread(&nextChar, sizeof(char), 1, inputFile)) {
if (nextChar == currentChar) {
count++;
} else {
fwrite(&count, sizeof(int), 1, outputFile);
fwrite(¤tChar, sizeof(char), 1, outputFile);
currentChar = nextChar;
count = 1;
}
}
fwrite(&count, sizeof(int), 1, outputFile);
fwrite(¤tChar, sizeof(char), 1, outputFile);
}
void decompress(FILE* inputFile, FILE* outputFile) {
int count = 0;
char currentChar;
while (fread(&count, sizeof(int), 1, inputFile)) {
fread(¤tChar, sizeof(char), 1, inputFile);
for (int i = 0; i < count; i++) {
fwrite(¤tChar, sizeof(char), 1, outputFile);
}
count = 0;
}
}
int main(int argc, char** argv) {
if (argc != 5) {
printf("Usage: %s <input_file> -c/-d <output_file>\n", argv[0]);
return 1;
}
char* inputFileName = argv[1];
char* outputFileName = argv[4];
char* option = argv[2];
FILE* inputFile = fopen(inputFileName, "rb");
if (!inputFile) {
printf("Error opening input file %s\n", inputFileName);
return 1;
}
FILE* outputFile = fopen(outputFileName, "wb");
if (!outputFile) {
printf("Error opening output file %s\n", outputFileName);
return 1;
}
if (strcmp(option, "-c") == 0) {
compress(inputFile, outputFile);
} else if (strcmp(option, "-d") == 0) {
decompress(inputFile, outputFile);
} else {
printf("Invalid option: %s\n", option);
return 1;
}
fclose(inputFile);
fclose(outputFile);
return 0;
}
```
这个程序可以通过命令行参数来完成指定文件的压缩解压,命令行参数如下:
```
rle file1 –c(-d) file2
```
其中,`file1` 是原始文件名,`-c` 表示压缩选项,`-d` 表示解压缩选项,`file2` 是新文件名。您可以在命令行中输入上述命令来运行程序,例如:
```
rle input.txt -c compressed.bin
```
这将会压缩 `input.txt` 文件,并将压缩后的结果保存到 `compressed.bin` 文件中。如果您想要解压缩 `compressed.bin` 文件,可以使用以下命令:
```
rle compressed.bin -d output.txt
```
这将会解压缩 `compressed.bin` 文件,并将解压缩后的结果保存到 `output.txt` 文件中。
阅读全文