先列出几个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控制,但是写入永远只能在文件结尾