什么是文件
文件通常是在磁盘或者固态硬盘上的一段已命名存储区。
C语言拥有两种文件模式:文本模式和二进制模式。
如果文件最初使用二进制编码的字符如ASCII表示文本,则该文件是文本文件,其中包括文本内容;如果文件中的二进制值代表机器语言代码或者数值数据(如用二进制值表示int型的值)、图片、音乐编码等,则该文件是二进制文件其中包含二进制内容。
处理文件常用函数
fopen()和fclose()
fopen(待打开文件的名称,用于打开文件的模式)
用与打开文件
返回值:成功——文件指针(指向FILE的指针),失败——NULL
打开文件的模式:
fclose(文件指针)
关闭文件
返回值:成功——0,失败——EOF(-1)
getc()和putc()
int getc(FILE*fp)
从当前文件指针处读取一个字符
返回值:当前字符的ASCII值,文件结尾则返回EOF
int putc(char ch,FILE*fp)
在当前文件指针处写入一个字符ch
返回值:写入成功——该字符的ASCII值,失败——EOF
getc()和putc()除了参数包含文件指针外与getchar()和putchar无异
fgets()和fputs()
char *fgets(char*str,int size,char*stream) 第一个参数是输入字符串的地址,第二个是输入的大小,第三个是文件指针(如果通过键盘输入则用stdin标准)
读取指定大小的字符串
返回值:成功——str,遇到零字符/失败——EOF
int fputs(const char*str,FILE *stream) 第一个参数是写入字符串的地址,第二个是文件指针
将字符串写入文件中(如果输出在屏幕上则用stdout标准)
返回值:成功——非负整数,失败——EOF
fprintf()和fscanf()
指定文件中读入/写入字符
工作方式与printf()和scanf()类似,但是它们的第一个参数要指定待处理的文件
fseek()和ftell()
fseek(文件指针,偏移量,模式)
第一个参数是文件指针;
第二个必须是long类型的值,表示指针移动的字节数,如0L,10L,-10L,分别表示不移动、向后移动10字节、向前移动十字节;
第三个表示读写地址的起始点,有SEEK_SET文件开始、SEEK_CUR当前位置、SEEK_END文件结尾
将文件指针定位到指定位置
返回值:成功——0,失败(如移动的距离超出文件范围)—— -1
long ftell(文件指针)
返回当前读写地址距离文件开头的字节数
返回值:long型,是当前读写地址距离文件开头的字节数
int fflush(FILE*fp)
刷新缓冲区——将输入缓冲区中所有未写入数据发送到fp指定的输出文件
int feof(FILE *fp)和int ferror(FILE *fp)
标准输入函数到达文件结尾或者发生错误时都会返回EOF,feof和ferror用来区分这两种情况
feof()检测到文件结尾时候返回一个非零值,否则返回0
ferror()检测到 读/写 出错时返回一个非零值,否则返回0
int setvbuf(FILE*restruct fp , char *restrict buf, int mode, size_t size)
创建供标准I/O使用的缓冲区。
fp识别待处理的流,buf指向待使用的存储区, size告诉setvbuf数组的大小, mode有_IOFBF完全缓冲(缓冲区填满是刷新), _IOLBF行缓冲(缓冲区满时或写入一个换行符时刷新), _IONBF无缓冲