C语言学习笔记---一个简单的文件压缩示例

138 阅读2分钟

「这是我参与11月更文挑战的第4天,活动详情查看:2021最后一次更文挑战」。

  通过一个简单的文件文件压缩例子,来学习文件操作的相关函数。该程序以只读的方式 “r” 打开第一个文件,以只写的方式“w”打开第二个文件。将第一个文件中每隔3个字符取出一个字符存储在第二个文件中。第二个文件的文件名是第一个文件名后面加上 .red 后缀。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

#define LEN 10
int main()
{
	int ch;
	FILE *in,*out;
	char name[LEN];
	int count = 0;
	//打开文件1 
	if((in = fopen("file1.txt","r") )==NULL) {		//读模式打开文件1 
		fprintf(stderr,"open error!\r\n");			//若文件打开失败,输出错误提示
		exit(EXIT_FAILURE);
	}
	//设置输出
	strncpy(name,"file1",LEN-5);					//拷贝文件名,存储在name数组中
	name[LEN - 5]='\0';
	strcat(name,".red");							//在文件名后添加 .red
	 if((out = fopen(name,"w") )==NULL) {			//写模式打开文件2 
		fprintf(stderr,"can not cread out file! \r\n");
	}
	//拷贝数据
	while( (ch = getc(in)) != EOF)
	{
		if(count++ %3 ==0)							//每隔3个字符存储一次
			putc(ch,out);
	 } 
	//收尾工作
	if( fclose(in) != 0 || fclose(out) != 0)		//关闭打开的两个文件
	{
			fprintf(stderr,"Error in closing files! \r\n");
	 } 
	system("pause");
	return 0;
}

  首先以只读的方式打开一个记事本,这个记事本要和当前文件放在同一目录中。打开文件时需要判断一下,如果文件不存在就打印出错误提示信息然后退出。

  接下来复制打开文件的文件名,接着给当前文件名添加.red的后缀。

  下面从打开的文件中开始读取数据,每隔3个字符就给新的文件中存储一次。

  当数据存储完成之后,关闭当前打开的两个文件,如果关闭是出现异常则输出提示信息。

  在文件1中输入以下内容:

在这里插入图片描述

  程序执行完成之后,就会生成一个新的文件。文件名和第一个文件一样,但是后缀变成了.red。

在这里插入图片描述

  用记事本打开两个文件,对比里面的内容。 在这里插入图片描述

  通过内容对比可以看出,文件2中的内容是文件1中每隔3个字符取一个组成的。相当于把一个文件的大小压缩成原来的1/3.

  这样就通过一个简单操作,就实现了文件的压缩。当然这种压缩方法是最原始的思维,现在的数据压缩要比这个原理复杂的多。