文件操作.

文件操作(本章讨论的是数据文件):

使用文件的原因:我们写的程序的数据是在内存中的,当程序关闭时数据会丢失,因此我们用文件将数据存储起来,从而达到对数据的持久化保存的效果; (文件是在硬盘上的)

文件的种类:程序文件和数据文件

  1. 程序文件:源程序文件(后缀为.c等等); 目标文件(在windows系统里后缀为.obj);可执行程序(在Windows系统里后缀为.exe)
  2. 数据文件:文件的内容不一定为程序,而是程序运行时要被读写的数据;比如程序运行时要从中读取数据的文件,或者输出内容的文件

文件名:文件路径 + 文件主干名 +  文件后缀

二进制文件与文本文件:

根据数据的组织形式来划分出的二进制文件和文本文件

数据在内存中是以二进制的形式存储的

数据如果不加转化的输出到外存的文件中,这就是二进制文件

数据如果被要求以ASCII码的形式进行存储到外存上,则需要发生转化; 这种以ASCII字符形式存储的文件叫做文本文件

Eg:

将10000进行存储;

ASCII码形式存储是将10000分为一个字符’1’和4个字符’0’; 然后存储其ASCII码值

二进制形式存储是将数字10000以二进制存储

VS上打开二进制文件时查看到的是二进制转化为十六进制后的小端存储的结果

Eg:10000二进制存储到文件后,查看该二进制文件存储的内容

流与标准流

一般来讲,程序从外部输入可能会有多种格式(例如:从键盘 / 文件 / …输入数据),且程序对外输出的格式也有多种(例如:输出到屏幕 / 文件 / 网络….; 而要应对这么多种格式的输入和输出;

对此我们引入了”: 多种输入格式将数据输入到 , 我们的程序直接从中读取数据; 我们进行输出时也是将数据输出到, 然后去面向要输出的格式.( 而输入数据到输出到想要的格式,是不需要我们进行操作的)

标准流:

为什么我们从键盘输入和在屏幕打印时,并没有手动打开”;为什么也能进行呢?

这是由于C语言程序在启动时,就默认打开了3个流: stdin(标准输入流) ; stdout(标准输出流) ; stderr(标准错误流)

这三个流的类型为FILE* ; 通常被称为文件指针

C语言中就是通过FILE*类型的文件指针来维护的各种操作的

文件指针:

每一个被使用的文件都会在内存中开辟一块空间,这个空间称为文件信息区; 这个区域存放了文件的相关信息[如果文件的名字,文件的](而这些相关信息是在一个结构体变量中的);该结构体类型是由系统声明的,且取名为FILE; 因此我们的 FILE* 则是指向这种结构体的指针变量

当我们打开一个文件的时候,系统会根据文件情况自动创建一个FILE结构体的变量,并自动填充里面的信息

一般通过一个结构体FILE的指针(即类型为FILE*)来维护这个FILE结构体变量

Eg:

FILE* pf;//⽂件指针变量

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

可以使pf指向某个⽂件的⽂件信息区(是⼀个结构体变量)。

通过该⽂件信息区中的信息(即知道文件信息区的地址)就能够访问该⽂件。也就是说,通过⽂件指针变量能够间接找到与它关联的⽂件。

文件操作的流程:

打开文件---> 读写文件 ---> 关闭文件

文件的打开与关闭

文件在读写前要打开文件,在读写后要关闭文件;

ANSIC C 规定了 fopen 来打开文件 , fcolse 来关闭文件

Fopen函数

语法: FILE * fopen ( const char * filename, const char * mode ); 
Filename为要打开的文件的文件名; [当我们不写路径,只写文件名的时候,是默认将文件创建到程序所在的路径处的; 这种也属于相对路径处创建]
手动添加文件创建路径的方法: 地址\\文件名   (\\是为了放置编辑器将\字母当成转义字符,前面地址间的\ 也是写为\\;原因相同)
Eg: 这种称为绝对路径

写路径时:  .表示在当前路径; ..表示从上一路径
Eg: 这种称为相对路径;    这个是在当前路径的上一个路径创建文件(即 ./..的含义)

mode为打开方式;
Eg:   打开的文件 为了写 (“此处的”写”为打开方式)
FILE* pf = fopen(“date.txt”, “w” ) ; 
如果pf != NULL 为真, 那么pf 为指向date.txt的文件信息区的指针变量;且由于打开方式为”w” ; 因此后续只能写;

当文件打开成功时,返回该文件的文件信息区地址; 如果打开失败,则返回NULL

Fclose函数:

int fclose ( FILE * stream ); 

stream为指向文件信息区的指针;   但是fclose函数不会将传入的指针变量置为NULL

读和写以及输入和输出:

文件的读写:

输入是读

输出是写

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值