【c语言】文件操作全解(上)

目录

1.文件是什么?

1.1 程序文件

1.2 数据文件

2.学习文件操作的前置知识

2.1流和标准流

2.1.1流

2.1.2标准流

2.2文件指针

3.文件打开和关闭操作

   3.1文件打开

文件名是什么?

文件打开方式?

返回类型:

举例:

3.2文件关闭


1.文件是什么?

好像通俗理解,磁盘(硬盘)上的文件是文件。
但是在程序设计中,我们一般谈的文件(从文件功能的角度来分类的)有两种:程序文件、数据文件。


1.1 程序文件


程序文件包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obi),可执行程序(windows环境后缀为.exe)。


1.2 数据文件


文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。类似后缀为.txt之类的文件。

在vs敲代码,所处理数据的输入输出都是以终端为对象的,即从终端的键盘输入数据,运行结果显示到显示器上。(像下图这样,从键盘输入5,在显示器上显示出5)


其实有时候我们会把信息输出到磁盘上,当需要的时候再从磁盘上把数据读取到内存中使用,本文处理的就是磁盘上文件。

2.学习文件操作的前置知识

2.1流和标准流

2.1.1流

我们要先理解流的概念。

程序的数据需要输出到各种外部设备,也需要从外部设备获取数据。

不同外部设备的输入输出操作各不相同,那程序员需要学习的操作就太多了吧。(像下图一样,那程序员至少要学习9种)

为了方便程序员对各种设备进行方便的操作,我们抽象出了流的概念,可以把流想象成流淌着字符的河。
程序针对文件、画面、键盘等的数据输入输出操作都是通过流操作的。
一般情况下,我们要想向流里写数据,或者从流中读取数据,都是要打开流,然后操作。(有了流之后,程序员上手的效率大大提升,只需要学习对流操作的方法)

2.1.2标准流

那为什么我们从键盘输入数据,向屏幕上输出数据,并没有打开流呢?

那是因为C语言程序在启动的时候,默认打开了3个流:


stdin-标准输入流,在大多数的环境中从键盘输入,scanf函数就是从标准输入流中读取数据。

stdout-标准输出流,大多数环境中输出至显示器界面,printf函数就是将信息输出到标准输出流。

stderr-标准错误流,大多数环境中输出到显示器界面。


这是默认打开了这三个流,我们使用scanf、printf等函数就可以直接进行输入输出操作的。
stdin、stdout、stderr 三个流的类型是:FILE *,通常称为文件指针。(FILE *这个文件指针其实也就是一种类型而已)
C语言中,就是通过 FILE*的文件指针来维护流的各种操作的。

2.2文件指针

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

每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是由系统声明的,取名 FILE.  所以,FILE是一个结构体类型.

不同的C编译器的FILE类型包含的内容不完全相同,但是大同小异。每当打开一个文件的时候,系统会根据文件的情况自动创建一个FILE结构的变量,并填充其中的信息,使用者不必关心细节。
一般都是通过一个FILE的指针来维护这个FILE结构的变量,这样使用起来更加方便。

创建一个FILE *类型的指针变量。

定义pf是一个指向FILE类型数据的指针变量。

可以使pf指向某个文件的文件信息区(是一个结构体变量)。通过该文件信息区中的信息就能够访问该文件。也就是说,通过文件指针变量能够间接找到与它关联的文件。

(画一个抽象的图理解一下,大家应该能清晰地感受到。)

3.文件打开和关闭操作

文件操作有:打开文件,读/写,关闭文件。先讲简单的打开和关闭操作。

我们用fopen函数来打开文件,fclose函数来关闭文件。在官网上cplusplus.com学习这两个函数。

   3.1文件打开

注意,fopen函数第一个参数是文件名,第二个是文件打开方式,返回类型是FILE*.

文件名是什么?

一个文件要有一个唯一的文件标识,以便用户识别和引用。为了方便起见,文件标识常被称为文件名。文件名包含3部分: 文件路径 + 文件名主干 + 文件后缀例如:c:\code\test.txt。

文件打开方式?

三列表格。(这里指列举一些常见方式,并不是全部)

文件使用方式含义如果指定文件不存在
"r"  (只读)为了输入数据,打开一个已经存在的文本文件出错
"w"  (只写)为了输出数据,打开一个文本文件建立一个新的文件
"a"  (追加)向文本文件尾添加数据建立一个新的文件
"rb"  (只读)为了输入数据,打开一个二进制文件出错
"wb"  (只写)为了输出数据,打开一个二进制文件建立一个新的文件
"ab"  (追加)向一个二进制文件尾添加数据建立一个新的文件

注意:

1.读和写的区别:

2.二进制文件和文本文件区别:

根据数据的组织形式,数据文件被称为文本文件或者二进制文件。

数据在内存中以二进制的形式存储,如果不加转换的输出到外存的文件中,就是二进制文件

如果要求在外存上以ASCI码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的文件就是文本文件。(这里不展开赘述)

返回类型:

返回类型是FILE*,所以我们需要用文件指针变量接收。

举例:

以写的形式打开一个文件(大家可以自己去试试别的)

没有报警告,说明成功创建。assert是断言,来判断pf指针是否是空指针。

如果不给出详细路径,那么新文件将会创立在.c源文件所在的文件夹里。

3.2文件关闭

fclose函数的参数是文件指针变量,返回类型是整型。

注意返回类型:

如果成功关闭文件,那么fclose函数返回整数0;

如果关闭失败,那么fclose函数返回EOF.

操作一下:

还有文件读/写操作,太多内容了,下一篇博客见~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值