之 关于文件操做函数ide
文件操做是C语言的最后篇章了,一块儿来看一下用C语言怎么操做文件函数
咱们所说的文件不一样于一个数据类型,好比一个test.txt文档,它有本身的一些属性,好比文件的当前位置、与该文件对应的内存缓冲区地址、文件操做方式等等。这些信息都在专门开辟必定空间的内存中存储着。学习
在内存中存储着是不错,并且它们还保存在一个结构体类型的变量中,好比:spa
type struct { int fd;//文件号 int cleft;//缓冲区中剩下的字符 int mode;//文件操做模式 char *nextc;//下一个字符位置 char *buff;//文件缓冲区位置 }FILE; /*FILE是一个存储文件信息的结构体类型的变量*/ |
在上述代码中能够看到,文件号、文件操做模式等信息都存储在一个结构体中。指针
这个结构体是系统本身定义的,定义在stdio.h头文件中,取名为FILE,也就是说FILE是系统名称,不可改变的,不是自定义。只要程序用到一个文件,系统就为此文件开辟一个如上的结构体变量。须要几个文件,系统就开辟几个这样的结构体。orm
这些结构体变量不用变量名来标识,而是经过指向结构体类型的指针变量去访问,这就是文件指针。blog
好比: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()
字符读写函数是以字符(字节)为单位的读写函数,也就是说每次操做都是读入或写入一个字符。
函数fgetc能够写成getc,而fputc能够写成putc。
(1)fgetc()字符读入函数
【格式】ch=fgetc(pf)
【含义】从pf所指定的文件中带回一个字符赋给ch
【返回值】若是执行fgetc读字符时遇到文件结束符,函数返回一个文件结束标志EOF。(EOF在stdio.h中定义为-1)
【程序实例】
#include<stdio.h> #include<stdlib.h>//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"); } |
而后执行程序,结果以下
【注意】程序中的路径必定要写正确了
Fgetc函数调用时,读取文件的方式必须是以读或者是读写的方式打开的。
(2)fputc()字符写入函数
【格式】fputc(ch,fp)
【含义】将字符ch写到文件指针fp所指的文件中。
【返回值】若是写入成功,返回写入的内容ch,若是输出失败,则返回一个EOF值。
【程序实例】
#include<stdio.h> #include<stdlib.h> 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); }
好了,程序显示内容写入test.txt文件中而且输出了,咱们找到e:\\test.txt下,打开test.txt看看是否有“李敏是个乖老婆”这句话。
能够看到的确是有了。
【注意事项】
在上述程序中咱们能够注意到这么一个问题,test.txt文件中原本就有了其它的内容(赵玉强的博客 http://zhaoyuqiang.blog.51cto.com),可是执行完上述程序后,文件中原来的内容不见了,取而代之的是新的内容(李敏是个乖老婆),若是想原来内容不删除的话,访问方式应该改成a+(追加读写方式)打开。