目录
文件IO
IO:可以分为两种:input和output(IO),代表着文件的输入输出。
input:输入,代表先硬盘输入数据。
output:输出,将数据写入外部设备。
文件IO:在C语言中主要指的是硬盘的IO。
数据存储的硬件介绍
硬盘(磁盘):存储数据的硬件,拥有持久性,意味着断电后数据依然存在。
内存条:吞吐量更大的存储硬件,具有易失性,意味着断电后数据消失不见。
所以从功能和性质上而言,我们将硬盘作为数据的持久化存储地段,将内存条作为数据处理的中间地带。
文件
文件的提出:为了对存储在硬件中的数据加以区分和便于数据的管理,我们从上层的角度提出了新的概念叫做:文件。我们将通过文件来对数据进行应用层面的管理。
文件的操作:以文件为单位对磁盘进行操作。
当我们通过程序对文件进行操作时,我们首先需要使用程序文件描述出来,通过这些描述性内容对磁盘指定位置的数据进行操作。
文件操作
1、打开文件
FILE *fopen(char *filename, const char *mode);
1.1参数介绍
其中,filename是文件名,代表着用户对文件的一种区分;mode是文件的打开方式(打开方式决定了对文件进行的操作)。
1.2打开方式
r:以只读方式打开文件;(若文件不存在会出错)
w:以只写的方式打开文件;(若文件不存在会自动创建新文件,若文件已经存在则会清空文件原有内容)
a:以追加写的方式打开文件;(若文件不存在会创建新文件,若文件已经存在则写入数据时总是会将新的数据追加到文件末尾)
r+:以可读可写的方式打开文件;(若文件不存在就可以出错,若文件已经存在会从文件起始位置进行操作,会覆盖文件原有内容)
w+:以可读可写的方式打开文件;(若文件不存在会创建新文件,若文件已经存在则会清空文件原有内容)
a+:以可读和追加写的方式打开文件;(若文件不存在会创建新文件,若文件已经存在则写入数据时总是将新的数据追加文件末尾)
b:以二进制形式打开文件,默认是以文本的形式打开。(在文本模式下,\n操作会被解释为\r\n,代表换行和光标移动)
……
无论通过以上任何一种的打开方式,文件打开后,默认的读写位置都在文件内容的起始位置。(注意a和a+是以从末尾开始追加)
1.3返回值
文件打开成功则会返回文件流指针,即文件的操作句柄;文件打开失败则返回NULL。
2、文件写入
size_t fwrite(const char *buffer, size_t size, size_t count, FILE *stream);
2.1参数介绍
其中,buffer 是一块内存空间的首地址,表示把该空间的数据写入到文件之中;
size是该块内存空间的大小;count是块空间的个数;(size * count便是将buffer中多少的数据写入到文件之中,即写入数据总量)
stream是fopen返回的文件流指针,标识我们需要操作哪一个文件。
2.2返回值
文件写入成功返回文件的完整块个数, 失败返回小于count大小的数字。
3.文件读取
size_t fread(void *buffer, size_t size, size_t count, FILE *stream);
3.1参数介绍
其中,buffe是一块内存空间的首地址,表示从文件读取到的数据放到内存buffer这块空间之中。
size是该块内存空间的大小;count是块空间的个数;(size * count便是实际中读取到的数据,即读取数据总量)
stream是fopen返回的文件流指针,标识我们需要操作哪一个文件。
3.2返回值
读取成功则返回设定的全部完整块个数(count),失败则返回读取到的完整快个数。
值得注意的是,我们在使用fread读取数据的时候,可以将size设置为1,将count设置为需要读取的数据长度。
如此只要读取到数据则返回值总是大于0的,否则当返回值为0(没有读取到一个完整的内存块)的时候我们无法确定是否读取到数据。
4.操作判断
int ferror(FILE *stream);
4.1功能
用于判断上一步文件操作是否成功,通常可以用于fread之后判断文件是否读取成功。
4.2参数介绍
stream是fopen返回的文件流指针,标识我们需要操作哪一个文件。
4.3返回值
成功则返回true(非0),失败则返回false。
5.读取判断
int feof(FILE *stream);
5.1功能
用于判断当前读取的文件内容(或者读写的文件内容)是否到达文件末尾。
5.2参数介绍
stream是fopen返回的文件流指针,标识我们需要操作哪一个文件。
5.3返回值
到达文件末尾则返回true(非0),未到达则返回false。
6.位置跳转
int fseek(FILE *stream, long offset, int origin);
6.1功能
将文件的读写位置进行跳转,即从origin位置偏移offset个字节处。(断点续传)
6.2参数介绍
其中,stream是fopen返回的文件流指针,标识我们需要操作哪一个文件;offset是偏移量;origin是相对偏移的起始位置。
6.3返回值
成功则返回0,失败则返回非0。
7.关闭文件
int fclose(FILE *stream);
7.1功能
关闭文件,释放资源
7.2参数介绍
stream是fopen返回的文件流指针,标识我们需要操作哪一个文件。
7.3返回值
成功则返回0。