文件的概念
能够存储数据的存储设备叫做文件,文件通常存储到硬盘上。文件其实是一系列的字节。
文件中的位置
文件有开头和结尾,还有一个当前位置,通常定义为从文件头到当前位置有多少个字节。
当前位置就是发生文件操作(读写文件的动作)的地方。
新的当前位置可以指定为距离文件开头的偏移量,或在某些情况下,指定为从前一个当前位置算起的正或负偏移量。还可以把当前位置移到文件尾。
文件流
流是外部数据或数据目的地的抽象表示,所以键盘、显示器上的命令行和磁盘文件都是流。
将数据写入流(即磁盘文件)有两种方式。首先,可以将数据写入文本文件,此时数据写入为字符,这些字符组织为数据行,每一行都用换行符结束。其次,可以将数据写入二进制文件。无论将数据写入文本文件还是二进制文件,不论它们是什么样的数据,这些数据最终都是一系列字节。
文件访问
头文件<stdio.h>
打开文件
fopen()
原型:FILE *fopen(const char *restrict name,const char *restrict mode);
参数:第一个变元是字符串指针,它是要处理的外部文件名称,它包含了文件名称字符串的地址。第二个变元也是一个字符串,称为文件模式,它指定对文件进行什么处理。
返回值:如果成功调用,则返回一个File*类型的指针,否则返回NULL。
模式:"w"进行写入操作。如果文件存在,就删除其当前内容。
"a"进行追加操作,写入的数据放在文件尾。
"r"进行读取操作。
fopen_s()
原型:errno_t fopen_s(FILE *restrict *restrict pfile,const char *restrict name,const char *restrict mode)
参数:第一个参数是FILE结构指针的指针,所以把存储文件指针的FILE*变量地址传递为第一个变元。
返回值:如果正常,就返回0,否则返回非0整数。在后一种情况下,文件指针会设置为NULL。
缓存文件
setvbuf()
原型:int setvbuf(FILE *restrict pfile,char *restrict buffer,int mode,size_t size)
参数:第一个参数是打开文件的文件指针。第二个参数指