C语言——文件初识

文章目录

  • 1.什么是文件
  • 2.为什么使用文件
  • 3.文件名
  • 4.如何使用
  • 5.文件指针
  • 6.文件的使用方式
  • 7.文件的读写函数
  • 8.文件指针调整函数
  • 9. long int ftell(FILE stream):返回文件指针相对于起始位置的偏移量
  • 10.rewind:读写位置恢复到最开始
  • 11.文本文件和二进制文件
  • 12.文件读取结束的判定feof
  • 13.文件缓冲区

1.什么是文件

磁盘中的文件是文件,键盘是文件,显示器也是文件,所以有一句话叫做一切皆文件。
但是从程序设计角度来说,文件一般有两种,程序文件和数据文件;
程序文件:包含源程序文件(.c后缀),目标文件(windows环境后缀.obj),可执行文件(windows环境.exe);
数据文件:程序运行时读取或输出的数据;
接下来谈的主要是数据文件;

2.为什么使用文件

程序运行时数据都是保存在内存之中,当退出程序这些数据就会消失;比如通讯录小程序,我们输入了联系人信息,一旦退出又要重新输入数据,这样的通讯录就没有了意义。而当我们退出程序将数据保存在磁盘文件之中,运行程序时再将数据读取出来,这样就将信息做到了持久化保存;

3.文件名

我们使用一个文件必须知道这个文件的名字,一个文件名通常包含3个部分:文件路径+文件名主干+文件后缀;
比如:e\project\file.log
文件路径:e盘之中的project 文件名主干:file 文件名后缀:log
C语言——文件初识_第1张图片

4.如何使用

要使用文件,首先我们要将一个文件打开,文件打开的函数是:FILE * fopen ( const char * filename, const char * mode );;
形参列表之中:filename表示的是打开文件的名字,mode表示的是打开的方式是读取还是写入。返回值是一个文件指针,下面来演示一下:
C语言——文件初识_第2张图片


上面进行了初步的演示,接下来我将继续介绍文件指针,文件的读写方式;

5.文件指针

C语言——文件初识_第3张图片
上面打开文件演示中的FILE *fp即定义的文件指针变量,用来接收文件信息区的地址,通过这个指针变量就可以访问到与文件信息对应的文件;

6.文件的使用方式

文件使用方式 含义
“r” 为输入打开一个文本文件
“w” 为输出打开一个文本文件
“a” 向文本文件尾增加数据
“rb” 为输入打开一个二进制文件
“wb” 为输出打开一个二进制文件
“ab” 向二进制文件尾增加数据
“r+” 为读/写打开一个文本文件
“w+” 为读/写建立一个新的文本文件
“a+” 打开一个文件在文件尾进行续写
“rb+” 为读/写打开一个二进制文件
“wb+” 为读/写建立一个新的二进制文件
“ab+” 打开一个二进制文件,在文件尾进行读和写

上述表格看起来复杂,其实只要知道:
1.w对应的是文本文件的输出,是覆盖式写入,当打开的文件不存在时会创建一个文件。
下面动图展示了“w”方式的覆盖式写入

2.r对应的是文本文件的输入,当打开的文件不存在时会打开失败。
C语言——文件初识_第4张图片

3.是对文本文件进行续写,是在文件末尾续写,当打开文件不存在时会打开失败。
经过验证,在vs2013,当打开文件不存在时也会自动创建一个新的文件;下面动图演示“a”在文件尾进行续写

4.b对应的是二进制文件,只要在上述四种方式后面加上b就是对应的二进制文件;

5.“+”表示的是读写一体,同样只要在上述方式后端添上“+”;

7.文件的读写函数

C语言——文件初识_第5张图片
下面演示两个字符输入函数的使用;
7.1getc演示:
C语言——文件初识_第6张图片
7.2fputc演示:
C语言——文件初识_第7张图片

8.文件指针调整函数

8.1 fseek:根据文件指针的位置和偏移量来定位文件指针C语言——文件初识_第8张图片
演示:
C语言——文件初识_第9张图片

9. long int ftell(FILE stream):返回文件指针相对于起始位置的偏移量

C语言——文件初识_第10张图片

10.rewind:读写位置恢复到最开始

C语言——文件初识_第11张图片

11.文本文件和二进制文件

文本文件:对人友好,将文件内容转化为对应的ASCII码值对应的符号
C语言——文件初识_第12张图片

二进制文件:直接将对应的补码储存到文件之中,即内存里面什么样,文件之中也是什么样
C语言——文件初识_第13张图片

12.文件读取结束的判定feof

文件读取结束的判定
文本文件的判定:
在使用feof的使用必须让文件一直读取,读取到出错再用feof判断返回值是否为文件的结尾;
fgetc判断是否为EOF,fgets判断是否为NULL;
因为文件读取出错的时候也有可能返回EOF,即因为其他因素而导致结束读取,这时候就需要用feof来判定返回值EOF是否为读取结束;
演示:
C语言——文件初识_第14张图片
二进制文件读取结束判定
二进制文件的读结束判定为:判定返回值是否小于实际要读的个数
因为当fread读取返回值一直等于要读取的个数(满足期望值)即会一直读取下去,当返回值小于期望值时就不会再读了;

成功演示
C语言——文件初识_第15张图片

失败演示
C语言——文件初识_第16张图片

13.文件缓冲区

先上理论:
c语言默认提供缓冲机制
常见缓冲机制有:无缓冲,行缓冲,全缓冲
普通文件写入采用全缓冲
显示器文件写入采用行缓冲
所谓的缓冲区本质就是一块内存,存在的最大价值就是为了提升程序的效率;

C语言——文件初识_第17张图片
引申
因为缓冲区的存在,需要刷新缓冲区或者文件操作结束的时候关闭文件,否则可能导致文件读写问题

你可能感兴趣的:(C语言基础知识,c语言,文件指针,文件名)