C语言——文件操作

大家好,今天和大家介绍C语言中文件操作的有关内容,欢迎大家观阅,记得三连支持一下哦!

2ac39c1b9b5647958eb5d3292b701059.jpeg

一、文件

在学习文件操作之前我们先来了解一下什么是文件。

1.什么是文件?

磁盘上的文件就是文件。

在编程中我们通常把文件按照功能分为两类:程序文件和数据文件。

(1)程序文件:

程序⽂件包括源程序⽂件(后缀为.c),⽬标⽂件(windows环境后缀为.obj),可执⾏程序(windows环境后缀为.exe)。如:

91d83a901f474fd897794e34150fb50c.pnga5074e9baf3748d59aacd9aa8105e49c.png

(2)数据文件:

⽂件的内容不⼀定是程序,⽽是程序运⾏时读写的数据,⽐如程序运⾏需要从中读取数据的⽂件,或者输出内容的⽂件。如:

c6e1c5f8d1754c31a35fccb3e05c063b.png

(3)文件名

⼀个⽂件要有⼀个唯⼀的⽂件标识,以便⽤户识别和引⽤。
⽂件名包含3部分:⽂件路径+⽂件名主⼲+⽂件后缀
例如: c:\code\test.txt
为了⽅便起⻅,⽂件标识常被称为⽂件名。

下面我们主要介绍的是数据文件。

2.为什么使用文件?

有小伙伴们可能会有疑问为什么需要文件?

如果没有⽂件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运⾏程序,是看不到上次程序的数据的,如果要将数据进⾏持久化的保存,我们可以使⽤⽂件。此外,如果我们需要的数据很多如上万个以上,这个时候我们就需要文件来存储读取这些数据。

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

根据数据的组织形式,数据⽂件被称为⽂本⽂件或者⼆进制⽂件。
数据在内存中以⼆进制的形式存储,如果不加转换的输出到外存,就是⼆进制⽂件
如果要求在外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的⽂件就是⽂本⽂件

二、文件的打开和关闭

1.流和标准流

(1)流

我们编程的过程中产生的数据需要输出到外部设备,同时也需要从外部输入数据,不同的外部设备的输⼊输出操作各不相同,为了⽅便程序员对各种设备进⾏⽅便的操作,我们抽象出了流的概念,我们可以把流想象成流淌着字符的河。C程序针对⽂件、画⾯、键盘等的数据输⼊输出操作都是通过流操作的。⼀般情况下,我们要想向流⾥写数据,或者从流中读取数据,都是要打开流,然后操作。
(2)标准流

那我们平时从键盘上输入数据,从屏幕输出数据时有没有打开流呢?

C语⾔程序在启动的时候,默认打开了3个流。

stdin、stdout、stderr

(1)stdin-标准输入流

7aff9ca32b41465099748a2c28abfc85.png

在⼤多数的环境中从键盘输⼊,scanf函数就是从标准输⼊流中读取数据。

(2)stdout-标准输出流

2b714c261d9c494eb3e0ac7d509d19ca.png

在⼤多数的环境中输出⾄显⽰器界⾯,printf函数就是将信息输出到标准输出流中。

(3)stderr-标准错误流

bc1b1634f50143f98607044abc045455.png

在⼤多数环境中输出到显⽰器界⾯。

我们在编程时可以使用printf、scanf等函数就是因为C语言程序在启动时,打开了这三个标准流,我们可以直接进行输入输出操作。

stdin、stdout、stderr这三个标准流的类型都是:FILE*,文件指针类型。我们要进行文件操作FILE*也是必须要使用的。C语⾔中,就是通过 FILE* 的⽂件指针来维护流的各种操作的。

2.文件指针

在缓冲⽂件系统中,关键的概念是“⽂件类型指针”,简称“⽂件指针”。

每个被使⽤的⽂件都在内存中开辟了⼀个相应的⽂件信息区,⽤来存放⽂件的相关信息(如⽂件的名字,⽂件状态及⽂件当前的位置等)。这些信息是保存在⼀个结构体变量中的。该结构体类型是由系统声明的,取名FILE。不同的C编译器的FILE类型包含的内容不完全相同,但是⼤同⼩异。
每当打开⼀个⽂件的时候,系统会根据⽂件的情况⾃动创建⼀个FILE结构的变量,并填充其中的信息,使⽤者不必关⼼细节。⼀般都是通过⼀个FILE的指针来维护这个FILE结构的变量,这样使⽤起来更加⽅便。如:798a9f6e953c4093a5568eeaa95e1d91.png

定义pf是⼀个指向FILE类型数据的指针变量。可以使pf指向某个⽂件的⽂件信息区(是⼀个结构体变量)。通过该⽂件信息区中的信息就能够访问该⽂件。也就是说,通过⽂件指针变量能够间接找到与它关联的⽂件。

3.文件的打开和关闭

说了这么多那么文件到底是怎么通过变成来打开和关闭的呢?我们接着往下看。

⽂件在读写之前应该先打开⽂件,在使⽤结束之后应该关闭⽂件。
在编写程序的时候,在打开⽂件的同时,都会返回⼀个FILE*的指针变量指向该⽂件,也相当于建⽴了指针和⽂件的关系。
ANSIC规定使⽤ fopen 函数来打开⽂件, fclose 来关闭⽂件。
fopen和fclose是两个库函数。

(1)fopen

4b681abcd8aa4ba89218a1e2d1348439.png

fopen有两个参数,filename是要打开文件的名字,mode表⽰⽂件的打开模式。

下面是文件的打开模式:

23062a619472474881d7fc0848ed4299.png

下面我们用"w"来举例,其他的也都类似。

723900d2725d445f97f78649261ed209.png

在这里如何写入数据到文本文件中我们后面会讲解。

(2)fclose

dbacc194b2dd4a39898ae9d3873dc97c.png

fclose就是用来关闭文件的,用法上面也有。

三、文件的顺序读写

上面我们介绍了如何打开和关闭文件,下面我们就来介绍如何读写文件.

想要对文件进行顺序读写就要了解下面这些函数:

9a0b6acfbc72477da15e2e3b1ea92375.png

下面我们介绍fputcfgetcfputs和fgets,剩下的用法相似,大家上网站查用法即可:https://cplusplus.com/

(1)fputc

cefaff90fff04e34aa2894fb3542af3c.png

fputc是一个文本写入函数,它的功能是将字符写入文本文件中。如:

d659c4a9ff5f418989d64ff09fedcfa0.png

0a5dbf232cc542cba041d09b43198069.png

(2)fgetc

6a631102dde2483ea6fe29bede65833d.png

fgetc是一个从文件中读取数据的函数,当它读取一个数据之后会自动往后读取。如:

9c21e9147de34dd2b544d1bb505467b9.png

3c5fd0c2c5454130960c1ae65c8b1151.png

(3)fputs

585f7410d8284f1db79d9fed4601cec6.png

fputs和fputc相似也是输入数据到文件中的函数,不过fputs输入的是字符串。如:

3cee4d125f644d4395bbd1f22e816cb4.png

(4)fgets

7c94290358a6494d85a14fa2adef4c70.png

fgets也是一个从文件中读取数据的函数,它会将读取到的数据放到一个数组中并且可以指定读取几个数据。如:48a8397b564d469390b1c79136269c98.png

还有几个函数用法也简单大家上网站查即可。

四、⽂件的随机读写

1.fseek

1eb58d55b847420390eb1d4989ab2a9b.png

fseek根据⽂件指针的位置和偏移量来定位⽂件指针。如:

2.ftell

返回⽂件指针相对于起始位置的偏移量。如:

3.rewind

让⽂件指针的位置回到⽂件的起始位置。如:

五、⽂件读取结束的判定

被错误使⽤的 feof

注意:在⽂件读取过程中,不能⽤feof函数的返回值直接来判断⽂件的是否结束。

feof 的作⽤是:当⽂件读取结束的时候,判断是读取结束的原因是否是:遇到⽂件尾结束。
8ea72dc761bd44cb9bc5270ef68beb21.png

(1)⽂本⽂件读取是否结束,判断返回值是否为 EOF (fgetc),或者 NULL(fgets).

如:

fgetc 判断是否为 EOF;

fgets 判断返回值是否为 NULL。

(2)⼆进制⽂件的读取结束判断,判断返回值是否⼩于实际要读的个数.

如:

fread判断返回值是否⼩于实际要读的个数。

好了,以上就是本篇文章的全部内容了,感谢大家的观阅,创作不易,记得三连支持一下哦!

本期文章结束后我们C语言部分的知识就讲完了,当然还有许多知识没有讲解,后面会有补充哦。那么接下来,我们将会介绍数据结构和C++有关知识,还请大家继续支持哦!

812dd1a160274e53b45d2b148cd7ba71.gif

  • 16
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值