「这是我参与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.
这样就通过一个简单操作,就实现了文件的压缩。当然这种压缩方法是最原始的思维,现在的数据压缩要比这个原理复杂的多。