C语言入门第十九篇,文件操作

文件操作是通过c语言编程实现对文本文件的控制,比如读入文件内容、处理文件内容等等。相信很多学校的学生在学习的时候老师就会叫大家用c语言做一个学生的成绩管理系统或者是什么的系统,如果不涉及到数据库,那多半是用文件来做。我们这篇主要讲文件的读出,处理,存入文件等的方式。
基本语法和操作
文件的操作是通过文件指针来完成的,这里我不太想去纠结什么文件流啊或者什么的繁琐概念。我们先来看看语法,声明一个文件指针。

FILE *f; 

这时我们声明了一个f,接下来我们就要告诉这个文件指针指向那个地址。

f=fopen("test.txt","r");

我们用c语言内置的fopen函数,将本文件夹下面的test.txt文件打开(注:这里我讲本文件夹加粗的意思是如果在其他的地方一定要给出具体地址,例如c盘下program文件,就应该给出"C:\Program\test.txt"。如果没有给出具体地址则默认在本文件夹,这里涉及到一个相对地址和绝对地址的概念,感兴趣的人自己搜一下。)。我们看到fopen函数我们传入了两个值,前一个是文件的地址,后一个是打开的方式。
我们仔细讲一下打开的方式,其实打开方式大类有三种分别是,读(read),写(write),追加(a)。接着后面可以加一个b(binary)代表以二进制的方式打开。下面给出打开方式的详细介绍图。
文件操作打开方式说明
上面是详细的fopen第二个参数能够使用的参数,图片来自于百度知道fopen
当我们打开了这个文件我们就可以对他进行读出数据,写入数据等等的操作。下面我们介绍几个函数,了解了这几个函数基本的文件操作就没有问题了。
文件操作函数
为了避免太过于枯燥,我们通过一些例子来讲讲。我们需要从下面的这个文件中读出数字判断他是否为素数(文件中有从1到1000的数),如果是就写入另一个文件。
文件内容
fscanf
首先我们会用到的函数是fscanf,我们需要将文件中的数字全部读出来,然后再对他进行是否为素数的判断。我们来看看怎么读入这个文件里面的数据。

FILE *fp;
int a[1000];
int i=0; 
fp=fopen("2.txt","r");
while(!feof(fp))
{
	fscanf(fp,"%d",&a[i]);
	i++;
}

这里我们解释一下,feof()这个函数是否为文件结束,如果不是就返回0,所以在前面加入了一个!逻辑取反的符号,前面在操作符那张讲过。这句话的意思就是只要没到文件的结尾就不跳出循环。然后我们利用fscanf()读入文件fp,第二个参数的意思是读入的格式,这里是整数所以使用%d,和前面scanf的格式化输入一样,因为有一千个数所以我们前面声明了一个1000的数组,第三个参数就是这个数据的元素啦,每读入一个数就让i自加1。
fprintf
上面我们对文件中的数字进行了读取,并把它放入了一个数组中,我们可以对数组进行判定如果是就把它写入另一个素数文件中。fprintf给我们提供了写入文件的命令。

FILE *fp1;
fp1=fopen("3.txt"."w+");
fprintf(fp1,"%d ",a[i]);

这里我们声明了一个新的文件指针fp1,指向了一个命名为3.txt的文件,然后使用fprintf,讲a[i]中的值传入了文件。这里fprintf同样是3个参数,分别是文件指针,格式化输出(这里需要注意我在%d后面加入了一个空格,是因为我想每写入文件一个数,后面就有一个空格,大家可以学习一下这种操作。),需要传入的值。
讲了fscanf和fprintf,他其实和scanf和printf还是有相同的地方,就是格式化输出。所以大家要注意如果传入字符就要用%c,浮点数就要用%f或者%lf等等。
fread
这里我们再举一个例子来讲fread和fwrite。这两个函数通常是读写一些数据结构(如果深入了解其实很多格式,例如图片等等它具有自己的数据结构,哪几个字节存了什么东西是有标准的编码规定的),这里我们假设打开一个后缀名为.bmp的图片。我们科普一下bmp是windows下的标准图片文件格式,bmp图片的数据结构中,前两个字节是BM这两个字符。我们就利用程序,打开一个bmp的文件,然后输出图片的前两个字符。

#include<stdio.h>
#include<stdlib.h>
int main()
{
	FILE *f;
	char a[10]={'\0'};
	f=fopen("1.bmp","r");
	fread(a,2,1,f);
	printf("%s\n",a);
} 

大家可以试一试这个程序,我们可以看到这一段程序,我们把1.bmp文件打开后,利用fread读出了前两个字符。这里我们可以看出fread的用法,第一个参数是接受读出的数据的,这里我们申明了一个字符串a,然后第二个参数是字节数。第三个是计数,意思我们读几个字节数出来,这里写的1表示读一个两字节出来,最后一个参数是我们文件指针。
这里说一下怎么建一个bmp的图片文件,直接在windows下新建一个画图保存的时候选择bmp文件就好了。
fwrite
再利用上面的例子,我们如果用写语音创建一个bmp文件时,第一步就是将BM这两个字符写在文件的前面。

FILE *f;
f=open("2.bmp","w+");
fwrite("BM",2,1,f);

有上面的fread作为基础,这个函数就很简单了,第一个参数是要写入的值,这里是BM字符。第二,三,四个参数和fread类似这里就不用再说了。

总结
本篇介绍C语言文件操作,介绍了一些简单的函数,对于文件的操作,这里仅仅是一个入门,例如fseek等等的函数都没有介绍。总的来说如果基础打的好的话,这篇并没有问题。

练习
1.试着写一个程序,讲上面例子说的文本中的数字读出来,然后再选出其中的素数的数字,写入另一个文本中。
2.试着写一个程序,读出BMP的数据结构,BMP的数据结构大家可以百度一下。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值