文件的基本操作

一.基础知识

文件是数据的集合,这个数据集的名称就是文件名。 实际上在前面的各章中我们已经多次使用了文件,例如:源程序文件、目标文件、可执行文件、库文件 (头文件)等。文件通常是存放在外部介质(如磁盘等)上的,在使用时才调入内存中来。从用户的角度看,Linux系统的文件分为普通文件和设备文件两种。

普通文件是指存放在磁盘或其它外部介质上的一个有序数据集,可以是源文件、目标文件、可执行程序; 也可以是一组待处理的原始数据,或者是一组输出的结果。对于源文件、目标文件、 可执行程序可以称作程序文件,对输入输出数据可称作数据文件。

设备文件是指与主机相联的各种外部设备,如显示器、打印机、键盘等。在Linux操作系统中,把外部设备也看作是一个文件来进行管理,把它们的输入、输出等同于对磁盘文件的读和写。通常把显示器定义为标准输出文件,一般情况下在屏幕上显示有关信息就是向标准输出文件输出。如前面经常使用的printf函数就是这类输出。键盘通常被指定标准的输入文件,从键盘上输入就意味着从标准输入文件上输入数据。

根据文件中数据的组织形式的不同,可以把文件分为文本文件二进制文件


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

1.文本文件

  • 数据以字符组成,把每个字符的 ASCII 码值存入文件中。每个 ASCII 码值占一个字节,每个字节表示一个字符。所以文本文件也称作字符文件或 ASCII 文件。

2.二进制文件

  • 把数据对应的二进制数值存储到文件中,是字节序列文件。

三.文件的基础操作

1.文件指针

  • 在C语言中用一个指针变量指向一个文件,这个指针称为文件指针。通过文件指针就可对它所指的文件进行各种操作。

例如:

FILE *fp = NULL;

该代码中的fp就为一个文件指针的变量名。(切记,FILE一定要大写)

2.打开文件

  • 我们可以使用C语言提供的库函数fopen来创建一个新的文件或者打开一个已存的文件,调用fopen函数成功后,返回一个文件指针( FILE),打不开会返回NULL。

后边的读取文件和写入文件的操作模式都取决于文件打开的方式。

函数声明:

 FILE *fp = fopen(const char *filename, const char *mode);

const char *filename 为文件的地址
const char *mode 为你对文件的操作模式

例如:

 FILE *fp = fopen("D:\\VScode\\学生管理系统\\class.txt", "a");

该文件指针就指向 D:\VScode\学生管理系统\class.txt 文件。(注意,在C语言中 \ 为转义符)

基本的打开模式
操作模式含义说明
r只读文件必须存在,否则打开失败。
w只写打开时会清空文件的原始内容然后再写
a追加写从文件尾开始写,文件不存在则新建
r+可读可写文件必须存在,否则报错。
w+可读可写文件不存在时会自己创建,然后打开时清空,再写
a+追加读写从文件尾开始写,文件不存在则新建

3.关闭文件

关闭文件的函数 fclose 的声明:

  fclose(文件指针);

打开文件用完之后一定要关闭文件!!!

4.读取文件

①fgetc函数

定义:

  字符变量 = fgetc(文件指针);

从文件中读取一个字符,读取成功后返回这个字符,并且读完后文件指针会移动到下一个字符,当文件完全读完时会返回EOF,EOF <=> -1。

②fgets函数

定义:

  fgets(字符串数组的首地址, 最大容量, 文件指针);

从文件中一次读取一行字符,读取完一行后文件指针会移动到下一行,文件读取不到时会返回NULL。(接收字符串的数组要注意清零!)

③fread函数

定义:

  fread(字符串首地址, 该地址所指向的数组的每个空间的大小, 读取的个数, 文件指针);

从文件中读取指定文件的多少个字节空间,读取成功返回实际读取的大小,读取不出来返回0。(接收字符串的数组要注意清零!)

④fscanf函数

定义:

  fscanf(文件指针, "读取的字符格式", 将读取到的字符存放给存储变量的该变量地址);

成功返回读入数据的个数,失败返回EOF。

5.写入文件

①fputc函数

定义:

  fputc('字符', 文件指针);

该函数往文件中写入一个字符,写入成功返回对应的ASCⅡ码,写入失败则返回EOF。

②fputs函数

定义:

  fputs(字符数组首地址, 文件指针);

该函数将该字符串写入文件,且该函数不会自动换行,需自行手动换行。

③fwrite函数

定义:

  fwrite(字符数组首地址, 该地址所指向的数组的每个空间的大小, 写入个数, 文件指针);

该函数往文件中写入指定长度的字符串,写完后文件指针会自动移动到下一个。

④fprintf函数

定义:

  fprintf(文件指针, "写入格式", 存储写入值的变量);

6.文件定位

在文件内部有一个位置指针,用来指向当前读写的位置,也就是读写到第几个字节。在文件打开时,如果打开模式是r和w,位置指针指向文件的第一个字节,如果打开模式是a,位置指针指向文件的尾部。每当从文件里读n个字节或文件里写入n个字节之后位置指针也会向后移动n个字节。

文件位置指针与C语言中的指针不是一回事。位置指针仅仅是一个标志,表示文件读写到的位置,也就是读写到第几个字节,它不表示地址。文件每读写一次,位置指针就会移动一次,它不需要你在程序中定义和赋值,而是由系统自动设置,对程序员来说是隐藏的。

在实际开发中,偶尔需要移动位置指针,实现对指定位置数据的读写。我们把移动位置指针称为文件定位。

C语言提供了ftell、rewind和fseek三个库函数来实现文件定位功能。

①ftell函数

ftell函数用来返回当前文件位置指针的值,这个值是当前位置相对于文件开始位置的字节数。它的声明如下:

  ftell(文件指针);

该函数返回开头到文件指针位置的偏移量。

②rewind函数

rewind函数用来将位置指针移动到文件开头,它的声明如下:

  rewind(文件指针);

该函数将文件指针重置到文件的开头。

③fseek函数

fseek函数用来将位置指针移动到任意位置,它的声明如下:

  fseek(文件指针, 偏移量, 位置);
  • 偏移量: 向左为-,向右为+
  • 位置:
    当前位置: SEEK_CUR
    文件末尾: SEEK_END
    文件开头: SEEK_SET
④feof函数

feof函数用来判断是否到达文件末尾,是返回1,不是返回0,它的声明如下:

  feof(文件指针);
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值