文件
- 文件的定义:文件是一组有关数据的有序集合
- 操作系统是以文件为单位对数据进行管理的
文件的分类
从用户观点
特殊文件(标准输入输出文件或标准设备文件)
普通文件(磁盘文件)
从操作系统的角度看
从操作系统的角度看,每一个与主机相连的输入、输出设备都看作是一个文件
按数据的组织形式
ASCII文件(文本文件)
每一个字节放一个ASCII代码
二进制文件
把内存的数据按其在内存中的存储形式原样输出到磁盘上存放
C语言对文件的处理
缓冲文件系统
系统自动地在内存区为每一个正在使用的文件开辟一个缓冲区。用缓冲文件系统进行的输出输入又称为高级磁盘输出输入。
非缓冲文件系统
系统不自动开辟确定大小的缓冲区,而由程序为每个文件设定缓冲区。用非缓冲文件系统进行的输出输入又称为低级输入输出系统。
注: 在ANSI C标准中只采用缓冲文件系统来处理文本文件和二进制文件,C语言对文件的读写都是用库函数实现的
文件的基本操作
文件型指针型变量
FILE * fp;//fp是一个指向FILE类型结构体的指针变量
FILE类型的数组
FILE f[5];定义了一个结构体数组f,可以用来存放5个文件的信息
打开文件
FILE * fp;
fp = fopen(文件名,使用文件方式);//文件名加上路径
文件使用方式
- r (只读)为输入打开一个文本文件
- w (只写)为输出打开一个文本文件
- a (追加)向文本文件尾增加数据
- rb (只读)为输入打开一个二进制文件
- wb (只写)为输出打开一个二进制文件
- ab (追加)向二进制文件尾增加数据
- r+ (读写)为读/写打开一个文本文件
- w+ (读写)为读/写建立一个新的文本文件
- a+ (读写)为读/写打开一个文本文件
- rb+ (读写)为读/写打开一个二进制文件
- wb+ (读写)为读/写建立一个新的二进制文件
- ab+ (读写)为读/写打开一个二进制文件
注: 1. 凡是”r”打开一个文件时,该文件必须已经存在,且只能从该文件中读出
2. 用”w”打开的文件只能向该文件中写入,若打开的文件不存在,则以指定的文件名建立该文件,若文件已存在,则将该文件删除,重建一个新文件
3. 若要向一个已存在的文件追加新的信息,只能用”a”的方式打开文件。但此时该文件必须是存在的,否则会出错。
4. 用只写或读写方式打开一个已存在文件时将清除原文件的内容,写入字符从文件首开始。如需保留原有文件内容,希望写入的字符以文件末开始存放,必须以追加的方式打开文件,被写入的文件若不存在,则创建该文件。
关闭文件
fclose(文件指针);//使文件指针变量不再指向该文件,若成功返回0,否则返回-1
文件的读写操作
字符输入输出函数
fputc()
fputc(ch,fp);//将字符(ch的值)输出到fp所指的文件中去
注:
fgetc()
ch = fgetc(fp);//从打开的文件fp中读取一个字符并送入ch中
注:1. 在fgetc()函数调用中,读取的文件必须是以读或写的方式打开的
2.使用fgetc()函数后,该位置指针(文件内部指针,与文件指针不同)向后移动一个字节,因此可连续多次使用fgetc()函数读取多个字符
字符串读写函数
fgets()
fputs()
# include <stdio.h>
int main(void)
{
char str[20]; /*定义一个最大长度为19, 末尾是'\0'的字符数组来存储字符串*/
printf("请输入一个字符串:");
fgets(str, 19, stdin); /*从输入流stdin中读取19个字符到字符数组str中*/
fputs(str, stdout); //将字符数组的内容输出到输出流stdout中
return 0;
}
注:stdin/stdout是标准输入/输出流,即屏幕输入/输出
数据块读写函数
fread()
fwrite()
格式化读写函数
fscanf()
fprintf()
int fscanf ( FILE *fp, char * format, ... );
int fprintf ( FILE *fp, char * format, ... );
//举例
FILE *fp;
int i, j;
char *str, ch;
fscanf(fp, "%d %s", &i, str);
fprintf(fp,"%d %c", j, ch);