文件的定义
磁盘上的文件是文件。
但是在程序设计中,我们一般谈的文件有两种:程序文件(包括源程序文件(.c),目标文件(.obj),可执行程序(.exe))、数据文件(文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件)
文件的类型
- 求在外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的文件就是文本文件。
- 数据在内存中以二进制的形式存储,如果不加转换的输出到外存,就是二进制文件。

文件的打开和关闭
文件在读写之前应该先打开文件,在使用结束之后应该关闭文件。
在编写程序的时候,在打开文件的同时,都会返回一个FILE*的指针变量指向该文件,也相当于建立了指针和文件的
关系。ANSIC 规定使用fopen函数来打开文件,fclose来关闭文件。
打开方式如下:
文件使用方式 | 含义 | 若文件不存在 |
---|
“r” (只读) | 为了输入数据,打开一个已经存在的文本文件 | 出错 |
“w”(只写) | 为了输出数据,打开一个文本文件 | 建立一个新文件 |
“a”(追加) | 向文本文件尾添加数据 | 出错 |
“rb”(只读) | 为了输入数据,打开一个二进制文本文件 | 出错 |
“wb”(只写) | 为了输出数据,打开一个二进制文本文件 | 建立一个新文件 |
“ab”(追加) | 向一个二进制文件尾添加数据 | 出错 |
“r+”(读写) | 为了读和写,打开一个文本文件 | 出错 |
“w+”(读写) | 为了读和写,建一个新的文件 | 建立一个新文件 |
“a+”(读写) | 打开一个文件,在文件尾进行读写 | 建立一个新文件 |
“rb+(读写)” | 为了读和写,打开一个二进制文件 | 出错 |
“wb+”(读写) | 为了读和写,建一个新的二进制文件 | 建立一个新文件 |
“ab+”(读写) | 打开一个二进制文件,在文件尾进行读写 | 建立一个新文件 |
文件的顺序读写
功能 | 函数名 | 适用于 |
---|
字符输入函数 | fgetc | 所有输入流 |
字符输出函数 | fputc | 所有输入流 |
文本行输入函数 | fgets | 所有输入流 |
文本行输出函数 | fputs | 所有输入流 |
格式化输入函数 | fscanf | 所有输入流 |
格式化输出函数 | fprintf | 所有输入流 |
二进制输入 | fread | 所有输入流 |
二进制输出 | fwrite | 所有输入流 |
对比一组函数
scanf | fscanf | sscanf |
---|
从控制台输入 | 从文件输入 | 从指定字符串输入 |
| 从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。这与 fgets有区别,fgets遇到空格不结束。 | 利用它可以从字符串中取出整数、浮点数和字符串等等 |
scanf("%d,%d,%d", &a, &b, &c); | fscanf(fp,"%s%d%lf",a,&b,&c) | sscanf("123456 ", “%4s”, str); |
printf | fprintf | sprintf |
---|
把格式化字符串输出到标准输出 | 是把格式化字符串输出到指定文件中 | 把格式化字符串输出到指定字符串 |
文件操作函数
- fseek函数
功 能: 重定位流上的文件指针
用 法: int fseek(FILE *stream, long offset, int fromwhere);
描 述: 函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere为基准,偏移offset个字 节的位置。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。
返回值: 成功,返回0,否则返回其他值。
2.ftell函数
功 能: 返回当前文件位置,也就是说返回FILE 指针当前位置。
用 法: long ftell(FILE *stream);
描 述: 函数 ftell() 用于得到文件位置指针当前位置相对于文件首的偏移字节数。在随机方式存取文件时,由于文件位置频繁的前后移动,程序不容易确定文件的当前位置。使用fseek函数后再调用函数ftell()就能非常容易地确定文件的当前位置。
3.rewind函数
功 能: 将文件内部的位置 指针重新指向一个流( 数据流/文件)的开头
用 法: void rewind(FILE *stream);
4.feof函数
功 能: 该函数用来判断文件是否结束。
用 法: int feof(FILE *fp)
返回值: 0:假值,表示文件未结束。
1:真值,表示文件结束。