一. 为什么使用文件
二. 什么是文件
三. 文件的打开和关闭
四. 文件的顺序读写
五. 文件读取结束的判定
一. 为什么使用文件
二. 什么是文件
2.1 程序文件
2.2 数据文件
![](https://img-blog.csdnimg.cn/direct/2ddbb17e597d45979246f1fdd0e28664.png)
2.3 文件名
三. 文件的打开和关闭
3.1 文件指针
可以看到FILE指针是一个结构体变量
上图是文件在使用时在内存中开辟的文件信息区
FILE* pf;//文件指针变量
3.2 文件的打开和关闭
// 打开文件FILE * fopen ( const char * filename , const char * mode );// 关闭文件int fclose ( FILE * stream );
fopen可以打开文件,需要将文件名传递给他,然后在将打开方式告诉他,当然如果文件不存在,那么就会打开错误,并返回空指针,那么我们就需要用perror(errno)将他的错误信息打印出来,看是什么原因没有打开文件,用打印结果可以看到,是没有在当前文件夹中找到要打开的文件
如果我们添加了,就打开成功了。
文件使用方式
|
含义
|
如果指定文件不存在
|
“r”
(只读)
|
为了输入数据,打开一个已经存在的文本文件
|
出错
|
w”
(只写)
|
为了输出数据,打开一个文本文件
|
建立一个新的文件
|
“a”
(追加)
|
向文本文件尾添加数据
|
建立一个新的文件
|
“rb”
(只读)
|
为了输入数据,打开一个二进制文件
|
出错
|
“wb”
(只写)
|
为了输出数据,打开一个二进制文件
|
建立一个新的文件
|
“ab”
(追加)
|
向一个二进制文件尾添加数据
|
出错
|
“r+”
(读写)
|
为了读和写,打开一个文本文件
|
出错
|
“w+”
(读写)
|
为了读和写,建议一个新的文件
|
建立一个新的文件
|
“a+”
(读写)
|
打开一个文件,在文件尾进行读写
|
建立一个新的文件
|
“rb+”
(读写
|
为了读和写打开一个二进制文件
| 出错 |
“wb+”
(读写)
|
为了读和写,新建一个新的二进制文件
|
建立一个新的文件
|
“ab+”
(读写)
|
打开一个二进制文件,在文件尾进行读和写
| 建立一个新的文件 |
4. 文件的顺序读写
功能
|
函数名
|
适用于
|
字符输入函数
|
fgetc
|
所有输入流
|
字符输出函数
|
fputc
|
所有输出流
|
文本行输入函数
|
fgets
|
所有输入流
|
文本行输出函数
|
fputs
|
所有输出流
|
格式化输入函数
|
fscanf
|
所有输入流
|
格式化输出函数
|
fprintf
|
所有输出流
|
二进制输入
|
fread
|
文件
|
二进制输出
|
fwrite
|
文件
|
那么我们就简单的将 a —— z 个字母写进test.txt中
可以看到东西已经被写进去了
当然我们也可以将我们写进去的字符读出来
或者我们可以一直读,因为fgetc没有读到内容的话会返回EOF
当然我们也可以写一行内容在文件中
当然 以 "w"写入时,如果原来的文件内也内容就会被全部清空,重新写入数据,当然如果不想销毁的话,我们可以在后面进行追加 "a"
当然我们也可以读一行数据到我们要存放到 ch 中当然这里的读是需要告诉他你想读多少个数据的
我们可以看到我们想让他读6个数据但是他只读了5个数据,实际是因为他在第6个数据的位置补了一个'\0' ,当然如果读取失败和遇到文件末尾时会返回空指针。
接下来对fprintf 和 printf进行比较
printf 是将我们要输出的数据读到我们的屏幕上,而fprintf 是将数据读到文件中
我们可以看到,fprintf 和printf 的区别是一个是将结果写到我们的biao
当然也可以用这种方式读数据出来
scanf 是从键盘上获取数据,而fsanf是从文件中读数据出来