C的文件流
fopen函数
函数功能:打开一个文件
函数原型:FILE fopen(const char path,const char * mode);
参数含义:path,字符串,文件路径或文件名,mode,字符串表示操作
mode参数 | 意义 |
---|---|
rt | 只读打开一个文本文件,只允许读数据 |
wt | 只写打开或建立一个文本文件,只允许写数据 |
at | 追加打开一个文本文件,并在文件末尾写数据 |
rb | 只读打开一个二进制文件,只允许读数据 |
wb | 只写打开或建立一个二进制文件,只允许写数据 |
ab | 追加打开一个二进制文件,并在文件末尾写数据 |
rt+ | 读写打开一个文本文件,允许读和写 |
wt+ | 读写打开或建立一个文本文件,允许读写 |
at+ | 读写打开一个文本文件,允许读,或在文件末追加数据 |
rb+ | 读写打开一个二进制文件,允许读和写 |
wb+ | 读写打开或建立一个二进制文件,允许读和写 |
ab+ | 读写打开一个二进制文件,允许读,或在文件末追加数据 |
对于文件使用方式有以下几点说明:
文件使用方式
1
r,w,a,t,b,+
六个字符拼成,各字符的含义是:
- r(read): 读
- w(write): 写
- a(append): 追加
- t(text): 文本文件,可省略不写 b(banary): 二进制文件
- +: 读和写
凡用“
r
”打开一个文件时,该文件必须已经存在,且只能从该文件读出。用“
w
”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。若要向一个已存在的文件追加新的信息,只能用“
a
”方式打开文件。但此时该文件必须是存在的,否则将会出错。在打开一个文件时,如果出错,
fopen
将返回一个空指针值NULL
。在程序中可以用这一信息来判别是否完成打开文件的工作,并作相应的处理。把一个文本文件读入内存时,要将ASCII码转换成二进制码,而把文件以文本方式写入 磁盘时,也要把二进制码转换成 ASCII码,因此文本文件的读写要花费较多的转换时间。 对二进制文件的读写不存在这种转换。
标准输入文件(键盘),标准输出文件(显示器),标准出错输出(出错信息)是由系统打开 的,可直接使用。
13.4 文件的读写
13.4.1 字符读写函数fgetc和fputc
2.写字符函数fputc
fputc
函数的功能是把一个字符写入指定的文件中,函数调用的形式为:
1 | fputc(字符量,文件指针); |
复制
fputc
函数有一个返回值,如写入成功则返回写入的字符,否则返回一个EOF
。可用此来判断写入是否成功。
13.4.2 字符串读写函数fgets和fputs
1.读字符串函数fgets
函数的功能是从指定的文件中读一个字符串到字符数组中,函数调用的形式为:
1 | fgets(字符数组名,n,文件指针); |
复制
其中的 n
是一个正整数。表示从文件中读出的字符串不超过 n-1
个字符。在读入的最 后一个字符后加上串结束标志’\0
‘。
对 fgets 函数有两点说明:
- 在读出
n-1
个字符之前,如遇到了换行符或EOF
,则读出结束。 fgets
函数也有返回值,其返回值是字符数组的首地址。
文件的随机读写
文件定位
1 | rewind(文件指针); |
复制
它的功能是把文件内部的位置指针移到文件首。
fseek
函数用来移动文件内部位置指针,其调用形式为:
1 | fseek(文件指针,位移量,起始点); |
复制
其中:
“文件指针”指向被移动的文件。
“位移量”表示移动的字节数,要求位移量是 long
型数据,以便在文件长度大于 64KB 时不会出错。当用常量表示位移量时,要求加后缀“L
”。
“起始点”表示从何处开始计算位移量,规定的起始点有三种:文件首,当前位置和文件尾。
其表示方法如下表。
起始点 | 表示符号 | 数字表示 |
---|---|---|
文件首 | SEEK_SET | 0 |
当前位置 | SEEK_CUR | 1 |
还要说明的是fseek
函数一般用于二进制文件。在文本文件中由于要进行转换,故往往计算的位置会出现错误。
文件检测函数
C语言中常用的文件检测函数有以下几个。
文件结束检测函数feof函数
调用格式:
1 | feof(文件指针); |
复制
功能:判断文件是否处于文件结束位置,如文件结束,则返回值为 1,否则为 0。
读写文件出错检测函数
ferror
函数调用格式:
1 | ferror(文件指针); |
复制
功能:检查文件在用各种输入输出函数进行读写时是否出错。如 ferror
返回值为 0 表示未出错,否则表示有错。
文件出错标志和文件结束标志置 0 函数
clearerr
函数调用格式:
1 | clearerr(文件指针); |
复制
功能:本函数用于清除出错标志和文件结束标志,使它们为 0 值。