先列出几个ASCII码写入的函数,在这些函数中,每个字符占用一个字节,可以用记事本直接打开查看

文件的打开与关闭

fp=fopen(filename,mode);

filename是一个字符串,这个字符串可以包括文件路径
可以采用如下形式

char ch[60]="c:\\users\\me\\Desktop\\newfolder\\text.txt"
FILE *fp=fopen(ch,"a+");

注意文件路径不区分大小写,需要使用两个反斜杠,因为反斜杠在c语言中是转义字符
PS:直接在C盘根目录写入可能会失败,原因是没有权限

打开一个文件
成功返回文件指针 失败返回NULL

fclose(fp);

关闭一个文件
成功返回0 失败返回EOF(-1)

单个字符的读写

int fgetc(FILE *fp);

从读写指针开始读一个字符
成功返回字符ASCII码 失败或文件结束返回EOF(-1)

int fputc(int ch,FILE *fp);

从读写指针开始写入一个字符
成功返回字符ASCII码 失败返回EOF(-1)

字符串读写

char *fgets(char *str,int num,FILE *fp);

num通常是str字符数组的长度,最多读入num-1个字符,否则强制结束
字符串的自然结束符是“换行符”和“文件结束符(EOF)”
会读入回车,把回车符放在str的末尾再加\0
文件读写指针也会跳过回车
成功返回str数组首地址 失败返回NULL

int fputs(char *str,FILE *fp);

从读写指针开始写入一个字符串(单纯的写入字符串,没有其他操作)
文件读写指针向前移动strlen(str)个字节
成功返回非负值(>=0,由编译器决定) 失败返回EOF(-1)

格式化读写

int fscanf(FILE *fp,char *format,arg_list);

fscanf(fp,"%s",str);//fscanf不会读入回车与空格,将一个单纯的字符串读入 

int fprintf(FILE *fp,char *format,arg_list);

无论是否以带b的形式fopen一个文件,文件操作函数都可以用(待验证)

以上函数都是以ASCII码形式写入,会占用较多的存储空间,耗时也长
接下来介绍数据块读写,相对而言占用空间少,耗时短

fwrite

fread

ftell

fseek

————————–更新————————–

fscanf使用时的注意

fscanf的格式控制要注意不能出现如%.2f之类的格式控制符,但是%f是可以的
如一个文件example.txt中只有12.34这个数字,想把它读入变量float a中
使用fscanf(fp,”%f”,&a);即可,用%.2f则会读入失败,返回值为0

与此不同的是,fprintf可以自由控制格式,随意向文件中写入

PS:fscanf读入非字符时,会自动过滤前面的空格,就像scanf(“%d”,&num);一样,不论前面输入多少空格都不影响最后的读入

fgets使用时的注意

在对文件的某一行使用fgets时,会把这一行的最后的回车符也读入,并在读入的字符数组中将回车符作为数组的最后一个字符,再在结尾加上’\0’

随机读写模式之间有差别

r+:以可读可写方式打开一个ASCII文件
w+:以可读可写方式打开或新建一个ASCII文件,原有文件内容全部删除
a+:同w+,但是不删除原有文件内容

r+可读可写,文件读写指针都在文件开头
w+会把文件内容给你扬了,文件读写指针都在文件开头
a+可读可写,但是读取从文件开头开始,并且可以用fseek和rewind控制,但是写入永远只能在文件结尾