c语言文件操作

  本节我们学习了文件相关的知识,文件分为两种,一种是程序文件,一种是数据文件,本节我们主要学习的是数据文件。

为了我们识别和引用,文件设有文件名,文件名由三部分组成,分别是文件路径,文件名主干,文件后缀。

数据文件分为文本文件和二进制文件,文本文件是以ASCII码值存储的文件,而二进制文件是以二进制的形式存储的文件。

字符一律是用ASCII码值存储,而数值既可以用ASCII码值存储也可以用二进制形式存储。

为了方便操作,我们抽象出了一个流的概念,我们对数据的输入输出操作都是通过流来操作的。我们想从流里面写如数据或者读取数据,都要先打开流,然后再操作。

当我们运行c语言程序的时候,默认打开了三个标准流,stdin-标准输入流,stdout标准输出流,stderr-标准错误流。而这三个流的类型是FILE*,我们称为文件指针。

C语言中我们就是通过文件指针来维护文件的各种操作。

struct _iobuf { char *_ptr; int _cnt; char *_base; int _flag; int _file; int _charbuf; int _bufsiz; char *_tmpfname; }; typedef struct _iobuf FILE;这是一种文件指针的声明,不同的编译器声明大同小异。

ANSIC规定使⽤ fopen 函数来打开⽂件, fclose 来关闭⽂件。

 文件使用方式   含义                                                           如果指定⽂件不存在

“r”(只读) 为了输⼊数据,打开⼀个已经存在的⽂本⽂件    出错

“w”(只写  为了输出数据,打开⼀个⽂本⽂件   建⽴⼀个新的⽂件

“a”(追加)向⽂本⽂件尾添加数据     建⽴⼀个新的⽂件

“rb”(只读)为了输⼊数据,打开⼀个⼆进制⽂件     出错

“wb”(只写)为了输出数据,打开⼀个⼆进制⽂件    建⽴⼀个新的⽂件

“ab”(追加)向⼀个⼆进制⽂件尾添加数据      建⽴⼀个新的⽂件

“r+”(读写)为了读和写,打开⼀个⽂本⽂件   出错

“w+”(读写)为了读和写,建议⼀个新的⽂件  建⽴⼀个新的⽂件

“a+”(读写)打开⼀个⽂件,在⽂件尾进⾏读写    建⽴⼀个新的⽂件

“rb+”(读写)为了读和写打开⼀个⼆进制⽂件      出错

“wb+”(读 写) 为了读和写,新建⼀个新的⼆进制⽂件        建⽴⼀个新的⽂件

“ab+”(读 写) 打开⼀个⼆进制⽂件,在⽂件尾进⾏读和写   建⽴⼀个新的⽂件

输入输出分别有一下函数fgetc,fputc,fgets,fputs,fscanf,fprintf,fread,fwrite

文件的随机读写我们可以借助这些函数,fseek根据⽂件指针的位置和偏移量来定位⽂件指针。

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

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

对于文件结束的判定

不能⽤feof函数的返回值直接来判断⽂件的是否结束。 feof 的作⽤是:当⽂件读取结束的时候,判断是读取结束的原因是否是:遇到⽂件尾结束。 1. ⽂本⽂件读取是否结束,判断返回值是否为EOF(fgetc)或者NULL(fgets)。

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

ANSIC标准采⽤“缓冲⽂件系统”处理的数据⽂件的,所谓缓冲⽂件系统是指系统⾃动地在内存中为 程序中每⼀个正在使⽤的⽂件开辟⼀块“⽂件缓冲区”。从内存向磁盘输出数据会先送到内存中的缓 冲区,装满缓冲区后才⼀起送到磁盘上。如果从磁盘向计算机读⼊数据,则从磁盘⽂件中读取数据输 ⼊到内存缓冲区(充满缓冲区),然后再从缓冲区逐个地将数据送到程序数据区(程序变量等)。缓 冲区的⼤⼩根据C编译系统决定的。

因为有缓冲区的存在,C语⾔在操作⽂件的时候,需要做刷新缓冲区或者在⽂件操作结束的时候关闭⽂ 件。 如果不做,可能导致读写⽂件的问题。 

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值