w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
wb 只写方式打开或新建一个二进制文件,只允许写数据。
wb+ 读写方式打开或建立一个二进制文件,允许读和写。
r 打开只读文件,该文件必须存在,否则报错。
r+ 打开可读写的文件,该文件必须存在,否则报错。
rb+ 读写方式打开一个二进制文件,只允许读写数据。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
一、文件写入
打开:FILE *a; a=fopen("student.txt","w");
(需要先定义文件指针)
写入格式:fwrite(指向数组或结构体的指针,单个数组里面内容的大小,数量,文件指针)
(注意返回0代表写入失败,成功返回数量)
关闭:fclose(a);
注意:写入的文件都是二进制文件,直接打开看到的是乱码
#include <stdio.h>
int main()
{
FILE *a;
int *p;
int d[]={5,4,6,99};
p=d;
a=fopen("student.txt","wb");
fwrite(p,sizeof(int),4,a);
fclose(a);
}
二、文件读取
打开:FILE *a; a=fopen("student.txt","r");
(需要先定义文件指针)(注意返回0代表写入失败,成功返回地址)
读取格式:fread(指向数组或结构体的指针,单个数组里面内容的大小,数量,文件指针)
(注意返回0代表写入失败,成功返回数量)
关闭:fclose(a);
#include <stdio.h>
int main()
{
FILE *a;
a=fopen("student.txt","rb");
int p[5];
fread(p,sizeof(int),4,a);
fclose(a);
}
三、函数
1.fseek()
特别注意:当使用完之后切记让指针回到初始位置,不如其它操作及其可能会失败
用法:移动指针位置
格式:fseek(fp,20,SEEK_SET);
参数:参数1为文件指针;参数2为偏移量;参数3为从哪开始偏移(SEEK_SET 文件的开头;SEEK_CUR 文件指针的当前位置;SEEK_END 文件的末尾);
2.ftell()
用法:用来获取文件的当前读写位置,返回字节数
格式:ftell(p)
参数为指针
实操(获取文件字节数-获取存入了几个内容):
FILE *file,*a;
a = fopen("student.txt","rb");
fseek(a, 0, SEEK_END);// 使用完之后切记让指针回到初始位置
len = ftell(a);
fseek(file, 0, SEEK_SET);// 回到开头(很关键,不然无法fread)
len = len / sizeof(struct Student);# 获取存入了几个结构体数据
fclose(a);