c语言文件常用的读写操作函数有什么不同,C语言进阶【文件】常用文件操作函数详解(一)...

C语言学习笔记

之 关于文件操作函数

文件操作是C语言的最后篇章了,一起来看一下用C语言怎么操作文件

一:文件指针

我们所说的文件不同于一个数据类型,比如一个test.txt文档,它有自己的一些属性,比如文件的当前位置、与该文件对应的内存缓冲区地址、文件操作方式等等。这些信息都在专门开辟一定空间的内存中存储着。

在内存中存储着是不错,而且它们还保存在一个结构体类型的变量中,比如:

type struct

{

int fd;//文件号

int cleft;//缓冲区中剩下的字符

int mode;//文件操作模式

char *nextc;//下一个字符位置

char *buff;//文件缓冲区位置

}FILE;

/*FILE是一个存储文件信息的结构体类型的变量*/

在上述代码中可以看到,文件号、文件操作模式等信息都存储在一个结构体中。

这个结构体是系统自己定义的,定义在stdio.h头文件中,取名为FILE,也就是说FILE是系统名称,不可改变的,不是自定义。只要程序用到一个文件,系统就为此文件开辟一个如上的结构体变量。需要几个文件,系统就开辟几个这样的结构体。

这些结构体变量不用变量名来标识,而是通过指向结构体类型的指针变量去访问,这就是文件指针。

比如:FILE *fp1,*fp2,*fp3;当引用文件时,就可以把这个文件的结构体首地址赋给某个文件指针(*fp1),通过*fp1就可以调用结构体以找到相关的信息。

一般来说,有几个文件就有几个结构体,有几个结构体就有几个文件指针。

二:文件操作:文件的打开与关闭。

对磁盘文件的操作必须是先打开,然后读写,最后关闭。

打开和关闭扮演着重要的角色,打不开文件也就代表着我们要对文件的操作是徒劳的吧。

1.文件的打开

【格式】fopen(文件名,文件使用方式)

【说明】fopen库函数,用来打开文件的函数,文件名为文件所在路径,文件使用方式有如下几种:

文件使用方式含义

“r”(只读)为输入打开一个文本文件

“w”(只写)为输出打开一个文本文件

“a”(追加)想文本文件尾增加数据

“rb”(只读)为输入打开一个二进制文件

“wb”(只写)为输出打开一个二进制文件

“ab”(追加)向二进制文件尾增加数据

“r+”(读写)为读写打开一个文本文件

“w+”(读写)为读写打开一个新的文本文件

“a+”(读写)为读写打开一个文本文件

“rb+”(读写)为读写打开一个二进制文件

“wb+”(读写)为读写建立一个新的二进制文件

“ab+”(读写)为读写打开一个二进制文件

“t”(文本文件)可以省略不写

总结开来:就是r为读w为写b为二进制文件a为追加+为读写。可以组合使用

【例如】

FILE *fp;

fp=fopen("e:\\test.txt","r");

含义是:在当前目录下,打开e盘下的test.txt文档,只允许“读”操作,并使fp指向该文件。

【返回值】如果不能成功打开,fopen将带回一个数字0的返回值,这个0实际上在stdio.h文件中被定义为空指针值NULL。常用下面方法打开一个文件:

if((fp=fopen("e:\\test.txt","rt"))==NULL)

{

printf("\nConnot open file!");//如果打开不成功则显示不能打开文件

getchar();

exit(1);//关闭所有文件,终止正调用的过程

}

2.文件的关闭

文件的关闭是必不可缺少的操作,如果不关闭文件可能造成数据丢失等后果。

文件的关闭相对来说要简单很多,只是一个执行命令而已。

【格式】fclose(fp);

【返回值】当顺利关闭后,返回0,如果为非0值,则说明关闭有错误。

关闭的过程:先将缓冲区中尚未存盘的数据写盘,然后撤销存放该文件信息的结构体,最后令指向该文件的指针为空。

关闭完成后如果再想打开文件,则应重新打开。

三:文件的读写

常用的文件读写函数有三类:

字符读写函数:fgetc()和fputc() (getc和putc)

字符串读写函数:fgets()和fputs()

数据块读写函数:fread()和fwrite()

格式化读写函数:fscanf()和fprintf()

1.字符读写函数:fgetc()和fputc() (getc和putc)

字符读写函数是以字符(字节)为单位的读写函数,也就是说每次操作都是读入或写入一个字符。

函数fgetc可以写成getc,而fputc可以写成putc。

(1)fgetc()字符读入函数

【格式】ch=fgetc(pf)

【含义】从pf所指定的文件中带回一个字符赋给ch

【返回值】如果执行fgetc读字符时遇到文件结束符,函数返回一个文件结束标志EOF。(EOF在stdio.h中定义为-1)

【程序实例】

#include

#include//exit在此头文件中

main()

{

FILE *fp;//定义文件指针

char ch;

/*判断文件打开是否成功*/

/*打开方式为rt,读文件方式*/

if((fp=fopen("e:\\test.txt","rt"))==NULL)

{

printf("\nConnot open file!");

getchar();

exit(1);

}

ch=fgetc(fp);//从fp所指文件中取出第一个字符

/*从文件中取出所有字符,一个字符一个字符的显示在中断上*/

while(ch!=EOF)

{

putchar(ch);//输出一个字符

ch=fgetc(fp);//取出一个字符

}

fclose(fp);

printf("\n");

}我们在e:\\test.txt下输入如下内容然后保存。

5e840e8a807dc75dbade786fb0229f7f.png

然后执行程序,结果如下

46e7e525060961f4db39e6ae97542efb.png

【注意】程序中的路径一定要写正确了

Fgetc函数调用时,读取文件的方式必须是以读或者是读写的方式打开的。

(2)fputc()字符写入函数

【格式】fputc(ch,fp)

【含义】将字符ch写到文件指针fp所指的文件中。

【返回值】如果写入成功,返回写入的内容ch,如果输出失败,则返回一个EOF值。

【程序实例】

#include

#include

main()

{

FILE *fp;//定义文件指针

char ch;

/*判断文件打开是否成功*/

/*打开方式为wt,写文件方式*/

if((fp=fopen("e:\\test.txt","wt+"))==NULL)

{

printf("\nConnot open file!");

getchar();

exit(1);

}

/*输入的字符一个一个的写入到文件中*/

printf("请输入一个字符串\n");

ch=getchar();

while(ch!='\n')

{

fputc(ch,fp);//将ch写入到文件中

ch=getchar();

}

rewind(fp);//将文件的指针指向文件开头

/*用fgetc来输出文件的内容*/

printf("写入文件的内容是:\n");

ch=fgetc(fp);

while(ch!=EOF)

{

putchar(ch);

ch=fgetc(fp);

}

printf("\n");

fclose(fp);

}

4a045733acd3dc2e2db7d8e29b45d9c2.png

好了,程序显示内容写入test.txt文件中并且输出了,我们找到e:\\test.txt下,打开test.txt看看是否有“李敏是个乖老婆”这句话。

c29dbfe2ca3310df51e74c84466a72ec.png

可以看到的确是有了。

【注意事项】

在上述程序中我们可以注意到这么一个问题,test.txt文件中本来就有了其它的内容(赵玉强的博客http://zhaoyuqiang.blog.51cto.com),但是执行完上述程序后,文件中原来的内容不见了,取而代之的是新的内容(李敏是个乖老婆),如果想原来内容不删除的话,访问方式应该改为a+(追加读写方式)打开。

关于之后的字符串函数、数据块函数和格式化函数我们下一篇文章再一起看,今天实在困死了!b2de308d4477c4f6fde2f77ece4fee35.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值