文件打开关闭输入输出
1.文件
1.文件可分为程序文件和数据文件
程序文件:源程序文件.c,目标文件 .obj,可执行程序文件.exe
数据文件:被其他文件引用的文件或数据
2.文件的开辟会在程序缓冲区中创建一个文件信息区
这个文件信息区的类型FILE,里面存储文件的地址,名字,大小等信息
FILE是一个结构体类型
2 函数
1.fopen
stdlib.h
FILE *fopen(const char *filename, const char *mode);
filename是文件名,mode是打开方式
文件名是由路径,名字,后缀构成的,有时没后缀
路径:相对路径,绝对路径
相对路径:从哪个盘一直到文件的全部路径
绝对路径:如果代码文件和打开文件在相同路径便可以直接写他的名字
. .//是返回该代码文件上一个文件夹路径。
mode
r读取 ,w写入,a文件末尾添加
如果是读取,没有找到此文件返回null
如果是写入,没有找到文件便会创造一个文件,文件末尾添加也是
但是写入会把该文件内容清空再写入
2.fclose
stdlib.h
int fclose(FILE *stream)
成功返回0,否则EOF
3.流
stream
当通过c语言程序把内存中的数据输入或输出给别的对象,需要通过流才可以输入输出,流的类型是FILE*
当程序打开默认给三个流
stdin 标准输入流,键盘(scanf便用的是这个默认的输入流)
stdout标准输出流,屏幕(printf便用默认输出流)
stderr 标准错误流
4. 支持所有输入流输出流的函数
stdlib.h,以下这些函数的流可以选择
字符
fgetc
int fgetc(FILE *stream);
从文件中获取一个字符,返回值是该字符askii码值
返回EOF读取失败
fputc
char* fgetc(char c,FILE *stream);
把字符输出给流的对象
字符串
fgets
int fgets(char*num,size_t count,FILE *stream)
num是从内存中接受数据的字符串,count是接受几个字符,stream是存入对象的流
count会比实际接受的少一个元素,因为最后一个要给’\0’,就像count是5,实际num接受是4个字符,如果count比文件指向的这一行所有元素都要多,那么只给这一行的字符
fputs
int fputs(char*num,FILE *stream)
把num里的元素传到这个源的对象里
格式化输入输出
fprintf
int fprintf(FILE* stream,char* num...)
stream是输出的对象的源,剩下的就跟普通printf用法一样,只不过printf的对象是屏幕,这个可以选择输出的对象
fscanf
int fscanf(FILE* stream,char* num...)
stream是输入的对象的源,用法也跟scanf一样,只不过对象会不同
5.只针对文件的输入输出函数
这些都是将二进制数据输入或输出到文件
fride
size_t fride(const void *ptr, size_t size, size_t nmemb, FILE *stream)
ptr是要从该文件获得数据的那个变量类型数组
size是ptr每个元素所占字节
nmemb是要录入多少个元素
stream必须是文件的流
fwrite
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
原理同fride,这个是输入到文件
拓展
#include
sprintf
int sprintf( char *buffer, const char *format [, argument] ... );
将·format输入到buffer字符串
sscanf
int sscanf( const char *buffer, char *format [, argument] ... );
将buffer的内容输出到按format格式输入