一.文件的打开与关闭
1.文件指针
每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是有系统声明的,取名FILE。
2.文件的打开与关闭
打开文件:用fopen函数打开文件,第一个参数是打开的文件路径,第二个参数是打开方式
用一个FILE变量pf接收fopen函数,但是有可能会接收失败,pf置为空指针,所以为了避免出现这种错误,都需要在打开文件后判断pf是否为空指针,如果为空则直接显示错误并返回。
关闭文件:使用fclose函数关闭文件,参数为打开文件的FILE的变量pf
使用完后,为了防止FILE变量pf变为野指针,将FILE变量pf置为NULL
例如:
//FILE变量定义
//打开文件
FILE* pf = fopen("text.txt","r");
if(pf == NULL)
{
perror("error open file");
return;
}
//关闭文件
fcolse(pf);
pf = NULL;
3.fclose函数的打开方式
文件使用方式 | 含义 | 打开的文件不存在 |
“r”(只读) | 读取数据,打开文本文件 | 出错 |
"w"(只写) | 写入数据,打开文本文件 | 新建文件 |
"a"(追加) | 打开文本文件,尾部追加数据 | 新建文件 |
"rb"(只读) | 读取文件,打开二进制文件 | 出错 |
"wb"(只写) | 写入文件,打开二进制文件 | 新建文件 |
"ab"(追加) | 打开二进制文件,尾部追加数据 | 出错 |
"r+"(读写) | 打开文件读写 | 出错 |
"w+"(读写) | 打开文件读写,文件有内容,清空读写 | 新建文件 |
"a+"(读写) | 打开文件,在尾部读写 | 新建文件 |
"rb+"(读写) | 打开二进制文件,进行读写 | 出错 |
"wb+"(读写) | 打开二进制文件,文件有内容,清空读写 | 新建文件 |
"ab+"(读写) | 打开二进制文件,在尾部进行读写 | 出错 |
二.文件的使用
1.顺序读写
功能 | 函数名 | 适用于 |
字符输入函数 | fgetc | 所有输入流 |
字符输出函数 | fputc | 所有输出流 |
文本行输入函数 | fgets | 所有输入流 |
文本行输出函数 | fputs | 所有输出流 |
格式化输入函数 | fscanf | 所有输入流 |
格式化输出函数 | fprintf | 所有输出流 |
二进制输入 | fread | 文件 |
二进制输出 | fwrite | 文件 |
1.字符输入输出函数
2.文本行输入输出函数
3.格式化输入输出函数
4.二进制输入输出函数
2.流的概念
首先要知道“流”的概念,流就像水一样,源源不断的传送,它是一种数据传输的模式。根据数据流方向的不同,可分为输入流和输出流。
下面三组函数的差别:
1.scanf / printf
标准输入流(键盘)和标准输出流(屏幕)函数
2. fscanf / fprintf
所有输入流和输出流的格式化函数
3. sscanf / sprintf
用于格式化数据和字符串之间的转换
sprintf 将格式化的数据写入字符串
sscanf 从字符串中读取格式化数据
3.随机读写
1.rewind 函数
将文件的流的位置设置到开头(指向文件的开头)
2.fseek 函数
根据文件指针的位置和偏移量来定位文件指针
3.ftell 函数
返回文件指针相对于起始位置的偏移量
三.文本文件和二进制文件
二进制文件:数据在内存中以二进制的形式存储,如果不加转换的输出到外存,就是二进制文件。
文本文件:如果要求在外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的文件就是文本文件。
字符一律以ASCII形式存储,数值型数据既可以用ASCII形式存储,也可以使用二进制形式存储。
如有整数10000,如果以ASCII码的形式输出到磁盘,则磁盘中占用5个字节(每个字符一个字节),而二进制形式输出,则在磁盘上只占4个字节
四.文件读取结束的判定
feof函数
应用于当文件读取结束的时候,判断是读取失败结束,还是遇到文件尾结束
若是遇到了与流有关的结束符,返回一个非零值;否则返回0。