一、基本概念
1. 文件分类
普通文件:存放在硬盘中的文件;
设备文件:屏幕、键盘等特殊文件;
文本文件:ASCII文件,每个字节存放一个字符的ASCII码,打开文件看到的是文本信息
二进制文件:数据按其在内存中的存储形式原样存放,打开文件看到的是乱码
2. 文件缓冲区
ANSI C(标准C语言库函数)标准采用“缓冲文件系统”处理数据文件。
写文件(设备文件除外),并不会直接写到文件中,会先放在缓冲区,默认情况下,关闭文件或缓冲区满了才写到文件。如果没有关闭文件,缓冲区也没有满,可以通过程序正常结束,或者人为刷新缓冲区fflush(fd)来把缓冲区的内容写到文件中。增加缓冲区只是为了提高效率,减少频繁交互的次数。
二、读写文件步骤
1. 打开文件
//定义文件指针
FILE *fp = NULL;
fopen("c:\\demo.txt", "w+"); //"c:\\demo.txt" windows有效
fp = fopen("./demo.txt", "w+"); // 45度 "c:/demo.txt" linux windows都可用
if (fp == NULL)
{
perror("fopen"); //打印错误信息
return;
}
打开方式如下:
文件使用方式 | 含义 | 如果文件不存在 |
---|---|---|
“r”(只读) | 为了输入数据,打开一个已经存在的文本文件 | 出错 |
“w”(只写) | 为了输出数据,打开一个文本文件 | 建立一个新文件 |
“a”(追加) | 向文本文件尾添加数据 | 出错 |
“rb”(只读) | 为输入数据,打开一个二进制文件 | 出错 |
“wb”(只写) | 为输出数据,打开一个二进制文件 | 建立一个新文件 |
“ab”(追加) | 向一个二进制文件尾添加数据 | 出错 |
“r+”(读写) | 为了读和写,打开一个文本文件 | 出错 |
“w+”(读写) | 为了读和写,建立一个文本文件 | 建立一个新文件 |
“a+”(读写) | 打开一个文件,在文件尾进行读写 | 建立一个新文件 |
“rb+”(读写) | 为了读和写打开一个二进制文件 | 出错 |
“wb+”(读写) | 为了读和写,新建一个新的二进制文件 | 建立一个新的文件 |
“ab+”(读写) | 打开一个二进制文件,在文件尾进行读和写 | 建立一个新的文件 |
c语言中有三个特殊的文件指针无需定义、打开可直接使用:
stdin: 标准输入 默认为当前终端(键盘)
我们使用的scanf、getchar函数默认从此终端获得数据;
stdout:标准输出 默认为当前终端(屏幕)
我们使用的printf、puts函数默认输出信息到此终端;
stderr:标准出错 默认为当前终端(屏幕)
当我们程序出错或者使用: perror函数时信息打印在此终端;
fputc('a', stdout); //stdout -> 屏幕, 打印普通信息
char ch;
ch = fgetc