c语言编写一个程序,可以在命令行输入参数,完成指定文件的压缩解压 命令行参数如下 rle file1 –c(-d) file2 第一个参数为可执行程序名称,第二个参数为原始文件名,第三个参数为压缩或解压缩选项,第四个参数为新文件名
时间: 2024-02-18 14:06:01 浏览: 17
好的,以下是一个可以实现该功能的 C 语言程序:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void compress(char *filename, char *new_filename) {
FILE *fptr = fopen(filename, "rb");
FILE *new_fptr = fopen(new_filename, "wb");
if (!fptr) {
printf("Error: File %s not found!\n", filename);
exit(1);
}
unsigned char count, curr, prev;
fread(&prev, sizeof(unsigned char), 1, fptr);
count = 1;
while (fread(&curr, sizeof(unsigned char), 1, fptr)) {
if (curr == prev) {
count++;
} else {
fwrite(&count, sizeof(unsigned char), 1, new_fptr);
fwrite(&prev, sizeof(unsigned char), 1, new_fptr);
prev = curr;
count = 1;
}
}
fwrite(&count, sizeof(unsigned char), 1, new_fptr);
fwrite(&prev, sizeof(unsigned char), 1, new_fptr);
fclose(fptr);
fclose(new_fptr);
}
void decompress(char *filename, char *new_filename) {
FILE *fptr = fopen(filename, "rb");
FILE *new_fptr = fopen(new_filename, "wb");
if (!fptr) {
printf("Error: File %s not found!\n", filename);
exit(1);
}
unsigned char count, curr;
while (fread(&count, sizeof(unsigned char), 1, fptr)) {
fread(&curr, sizeof(unsigned char), 1, fptr);
for (int i = 0; i < count; i++) {
fwrite(&curr, sizeof(unsigned char), 1, new_fptr);
}
}
fclose(fptr);
fclose(new_fptr);
}
int main(int argc, char *argv[]) {
if (argc != 5) {
printf("Error: Invalid number of arguments!\n");
exit(1);
}
char *filename = argv[2];
char *new_filename = argv[4];
if (strcmp(argv[3], "-c") == 0) {
compress(filename, new_filename);
printf("File %s compressed to %s successfully!\n", filename, new_filename);
} else if (strcmp(argv[3], "-d") == 0) {
decompress(filename, new_filename);
printf("File %s decompressed to %s successfully!\n", filename, new_filename);
} else {
printf("Error: Invalid option!\n");
exit(1);
}
return 0;
}
```
该程序可以使用命令行参数 `rle file1 -c file2` 或 `rle file1 -d file2` 来分别压缩或解压文件 `file1`,并将结果保存为文件 `file2`。其中,`-c` 和 `-d` 分别表示压缩和解压缩选项。