目录
为什么要使用文件?
文件可以将数据存存放在电脑的硬盘上面,达到长期存储该数据的目的。
比如在之前写的通讯录程序中,我们没有使用文件或者数据库用来存储我们之前输入过的信息,这就导致我们每次使用通讯录都得重新输入一遍信息,这是非常不符合通讯录的使用要求的。http://t.csdn.cn/O6R62
http://t.csdn.cn/O6R62
文件的概念
在程序设计中,我们所称的文件分为两类,一类是程序文件,另一类是数据文件。
数据文件
主要是源程序文件、目标文件、可执行程序。
程序文件
程序中需要从中读取数据或者是向其输出内容的文件。
文件名
一个文件要有一个位移的文件标识,为了方便我们将这个文件表示称为文件名。
文件名主要包含三个部分:文件路径+文件名主干+文件后缀
文件的使用
想要将内容输出到文件中或者想要从文件中读取内容,必要的一步就是打开文件。
文件类型指针(以下称为文件指针)
每一个被打开的文件都会在内存中开辟一个相应的文件信息区,用来存放文件的相关信息(如文件名、文件状态、文件当前位置)。这些信息都是保存在一个由系统声明的结构以变量中,该结构体类型为:FILE。
为了对文件进行操作,需要一个指向上述结构体类型的指针(FILE* pf)来维护文件信息去,从而对文件进行操作。
文件的打开和关闭
文件的打开和关闭需要借助两个函数,一个是打开文件:fopen函数,另一个是关闭文件:fclose函数。
fopen函数的使用
查表可知,当文件正常打开时,返回的是指向该文件的指针,打开失败时会返回空指针。其参数分别为要打开的文件名,文件的打开方式。所以在打开文件的时候需要判断函数是否打开成功。
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int main() { FILE* pf=fopen("abc.txt", "rb"); if (pf == NULL) { perror("fopen:"); } else { printf("打开成功\n"); } return 0; }
fclose函数的使用
fclose的参数为要关闭文件的地址。在使用完文件之后,我们要记得及时关闭文件,防止文件被意外更改。同时要将指向文件的指针置为空指针,防止出现野指针的问题。
fclose(pf); pf = NULL;
文件的打开方式
“r” 以"读"的方式打开一个文本文件(只能读)。
“r+” 与"r"的区别在于可以"写"。
“rb” 打开一个二进制文件(只能读)。
“rb+” 与"rb"的区别在于可以"写"。
“w” 以"写"的方式创建一个文本文件,如果这个文件已经存在,就会覆盖原来的文件。
“w+” 与"w"的区别在于,增加了"读"。
“wb” 以"写"的方式创建一个二进制文件。
“wb+” 与"wb"的区别在于,增加了"读"。
“a” 以"尾部追加"的方式打开一个文本文件(只能写)。
“a+” 与"a"的区别在于,增加了"读"。
“ab” 以"尾部追加"的方式打开一个二进制文件(只能写)。
“ab+” 与"ab"的区别在于,增加了"读"。
文件的顺序读写
一些关于文件的常见函数
功能 函数名 适用于 字符输入函数 fgetc 所有输入流 字符输出函数 fputc 所有输出流 文本行输入函数 fgets 所有输入流 文本行输出函数 fputs 所有输出流 格式化输入函数 fscanf 所有输入流 格式化输出函数 fprintf 所有输出流 二进制输入 fread 文件 二进制输出 fwrite 文件
一组函数的对比
scanf | 针对标准输入流的格式化输入语句 |
fscanf | 针对所有输入流的格式化输入语句 |
sscanf | 从一个字符串中读取一个格式化数据 |
printf | 针对标准输出流的格式化输出语句 |
fprintf | 针对所有输出流的格式化输出语句 |
sprintf | 将一个格式化数据转换成一个字符串 |
文件的随机读写
我们肯定想要随心所欲地修改文件,这就需要用到一些实现文件的随机读写的函数。
fseek (根据文件指针的位置和偏移量来定位文件指针)
查表可以知道,参数分别是文件流,偏移量,起始位置。
其中,对于起始位置,我们常用三个参数(seek_set开始位置\seek_cur当前位置\seek_end结束位置)
ftell函数(返回文件指针相对于起始位置的偏移量)
参数就是指向要使用文件的指针。
rewind函数(让文件指针的位置回到文件的起始位置)
参数就是指向要使用文件的文件指针。
文本文件和二进制文件
根据数据文件的组织形式,数据文件分为二进制文件和文本文件两种。
二进制文件
数据在内存中是以二进制形式存储的,如果不加转换就输出到文件中,则该文件称为二进制文件。
文本文件
如果在存储在文件时采用的是ASCII字符形式存储的就称为文本文件。
文件读取结束的判定
判断一个文件是否结束、判断一个文件是否是正常结束,都需要用到一些函数。
feof函数
feof函数通常使用在文件已经结束时,用于判断是由于读取失败结束还是由于遇到文件末尾结束。
文本文件结束的判定
如果文本文件结束的话,对于fgetc函数的返回值是EOF,对于fgets函数的返回值是NULL
二进制文件的结束的判定
fread判断返回值是否小于实际要读的个数。.
总结
介绍了文件的概念,文件的打开与关闭及相关函数,文本文件和二进制文件、文件的结束标志、文件的分类、文件的顺序读写于随机读写