1.fopen函数
调用形式为:
fopen( filename, mode );
filename
为文件名,包括文件路径;
mode
为打开方式。fopen 会获取文件信息,并保存到一个FILE类型的结构体变量中,然后将变量的地址返回,所以需要一个FILE类型的指针来接收 fopen 的返回值:
FILE *fp = fopen( filename, mode);
2.打开方式
打开方式 | 说明 |
---|---|
r | 以只读方式打开文件,只允许读取,不允许写入。该文件必须存在。 |
r+ | 以读/写方式打开文件,允许读取和写入。该文件必须存在。 |
rb+ | 以读/写方式打开一个二进制文件,允许读/写数据。 |
rt+ | 以读/写方式打开一个文本文件,允许读和写。 |
w | 以只写方式打开文件,若文件存在则长度清为0,即该文件内容消失,若不存在则创建该文件。 |
w+ | 以读/写方式打开文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。 |
a | 以追加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留(EOF符保留)。 |
a+ | 以追加方式打开可读/写的文件。若文件不存在,则会建立该文件,如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留(原来的 EOF符 不保留)。 |
wb | 以只写方式打开或新建一个二进制文件,只允许写数据。 |
wb+ | 以读/写方式打开或建立一个二进制文件,允许读和写。 |
wt+ | 以读/写方式打开或建立一个文本文件,允许读写。 |
at+ | 以读/写方式打开一个文本文件,允许读或在文本末追加数据。 |
ab+ | 以读/写方式打开一个二进制文件,允许读或在文件末追加数据。 |
3.字符读取函数 fgetc
调用的形式为:
字符变量 = fgetc(文件指针);
例如:
char ch; FILE *fp = fopen("D:\\demo.txt", "r+"); ch = fgetc(fp);
4.字符写入函数fputc
调用的形式为:
rewind函数调用形式为:
fputc( 字符, 文件指针 );
例如:
fputc('a', fp);或者:
char ch = 'a'; fputc(ch, fp);
5.读字符串函数fgets
fgets 函数的功能是从指定的文件中读一个字符串到字符数组中,调用的形式为:
fgets(字符数组名, n, 文件指针);
对fgets函数有两点说明:
- 在读出 n-1 个字符之前,如遇到了换行符或EOF,则读取结束。
- fgets 函数也有返回值,其返回值是字符数组的首地址。
6.写字符串函数fputs
fputs 函数的功能是向指定的文件写入一个字符串,调用形式为:
fputs(字符串, 文件指针);
7.数据块读写
读数据块函数 fread 的调用形式为:
fread(buffer, size, count, fp);写数据块函数 fwrite 的调用形式为:
fwrite(buffer, size, count, fp);
将文件指针移动到文件开头:
rewind(fp);
其中:
- buffer 表示缓冲区,是一个指针,可以是数组、变量、结构体等。在 fread 函数中 buffer 用来存放读取到的数据,在 fwrite 中用来存放要写入的数据。
- size:表示数据块的字节数。
- count:表示要读写的数据块的块数。
- fp:表示文件指针。
8.格式化输入输出
fscanf(文件指针, 格式字符串, 输入表列);
fprintf(文件指针, 格式字符串, 输出表列);
例如:
fprintf(文件指针, 格式字符串, 输出表列);
fscanf(fp, "%d %s", &i, str); fprintf(fp,"%d %c", j, ch);
9.文件定位函数rewind和fseek
rewind(文件指针);
它的功能是把文件内部的位置指针移到文件首。
fseek函数用来移动文件内部位置指针,其调用形式为:
例如:
还要说明的是fseek函数一般用于二进制文件,在文本文件中由于要进行转换,所以往往计算的位置会出现错误。
fseek(文件指针, 位移量, 起始点);
其中:
- “文件指针”指向被移动的文件。
- “位移量”表示移动的字节数,要求位移量是long型数据,以便在文件长度大于64KB 时不会出错。当用常量表示位移量时,要求加后缀“L”。
- “起始点”表示从何处开始计算位移量,规定的起始点有三种:文件首,当前位置和文件尾。其表示方法如下表:
起始点 | 表示符号 | 数字表示 |
---|---|---|
文件首 | SEEK_SET | 0 |
当前位置 | SEEK_CUR | 1 |
文件末尾 | SEEK_END | 2 |
fseek(fp, 100L, 0);表示把位置指针移到离文件首100个字节处。
还要说明的是fseek函数一般用于二进制文件,在文本文件中由于要进行转换,所以往往计算的位置会出现错误。
10.getchar()、getch()、getche()区别
-- | 缓冲区 | 头文件 | 回显 |
---|---|---|---|
getchar() | 有缓冲区 | stdio.h | 有回显 |
getch() | 无缓冲区 | conio.h | 无回显 |
getche() | 无缓冲区 | conio.h | 有回显 |