1.文件的概述
定义:文件是指存储在外部介质(例如磁盘)上的数据的集合
2.文件操作
2.1 文件的打开
函数原型:
FILE *fopen(const char *filename,const char *mode) //filename是文件名,mode是决定文件的用途
例如:
FILE *fp;
fp=fopen("test.txt","r");//用fp指向读取的test.txt文件,因为函数原型中是const char*类型,所以有双引号
文件打开方式分为几类:
“r” 打开一个用于读取的文本文件;
“w“创建一个用于写入的文本文件;
"a"附加到一个文本文件;
"r+"或"a+"打开一个用于读/写的文本文件;
"w+"创建一个用于读写的文本文件;
判断打开有哪种错误的函数perror("")
:
函数原型是:
void perror(const char *str); //perror()函数打印str(字符串)和一个相应的执行定义的错误消息到全局变量errno中.
举例:
if(fp==NULL){
perror("fp"); //perror函数用于判断打开文件出现哪种错误
return -1;
}
输出结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DydbDMYo-1611834621626)(C:\Users\86131\AppData\Roaming\Typora\typora-user-images\image-20210128155913842.png)]
2.2 文件关闭
fclose(fp)
,文件的打开与关闭与内存的申请malloc
和释放free
一样;
由于打开文件后会占据内存,且打开文件有上限,所以就要fclose
函数原型:
int fclose(FILE *p); //fclose关闭文件,释放文件缓冲区的空间,fclose()执行成功时返回0,否则返回EOF.
由于无法显示结果,所以没有输出举例
2.3 文件的读写
读:(fgetc,fgets)
1.fgetc(fp)
从文件中读取一个字符
c=fgetc(fp);
printf("%c",c); //打印fgetc从fp中读取的字符c
函数原型:
int fgetc(FILE *p); //fgetc读取成功时返回*p的下一个字符,如果到达文件尾或者发生错误则输出EOF
2.fgets
:
函数原型:
char *fgets( char *str, int num, FILE *stream );//函数fgets()从给出的文件流中读取(num - 1)个字符并且把它们转储到str(字符串)中.
举例:
FILE *fp;
fp=fopen("test.txt","r+");//test.txt中存的字符为"hello!"
char a[10];
fgets(a,10,fp);//输出时a[10]为"hello!"
3.fscanf
:
函数原型:
int fscanf( FILE *stream, const char *format, ... );//由scanf变化而来
对比scanf
函数和fscanf
函数:(与printf
和fprintf
相似)
fscanf |
scanf |
---|---|
int fscanf( FILE *stream, const char *format, ... ); |
int scanf( const char *format, ... ); |
唯一不同之处在于fscanf
中有一个文件结构体指针。
写:(fputc,fputs)
1.fputc('字符',fp)
函数原型:
int putc(int ch,FILE *fp); //把给出的字符ch写到fp中. 返回值是字符, 发生错误时返回值是EOF.
2.fputs
函数原型:
int fputs(const char *str,FILE *fp);//fputs()函数把str(字符串)指向的字符写到给出的输出流. 成功时返回非负值, 失败时返回EOF.
举例:
FILE *fp; //定义一个文件类型的结构体数组
char a[10]="hello"; //定义一个字符串,另一种方式char a[10]={'h','e','l',...};
fp=fopen("test.txt","w+"); //创建一个可以用于读写的文本文件
fputs(a,fp); //将字符串a写入fp中
结果:存代码的文件下有了一个新的文件test.txt
,在这个文件中的字符串为hello!
3.fprintf
函数原型:
int fprintf( FILE *stream, const char *format, ... );
示例:
char name[20] = "Mary";
FILE *out;
out = fopen( "output.txt", "w" );
if( out != NULL )
fprintf( out, "Hello %s\n", name );
在源代码所在的文件中,output.txt文件中就会有Hello Mary的字样。
来源:oschina
链接:https://my.oschina.net/u/4368375/blog/4938226