C语言之文件操作

目录

一、文件与文件流

文件流

二、文件的打开与关闭

文件的打开

文件的关闭

文本文件和二进制文件的区别

三、顺序读写

以字符形式读写文件

 以字符串形式读写文件

以数据块的形式读写文件

格式化读写

四、随机读写

五、获取文件大小

六、复制、插入、删除、更改文件内容

文件复制函数

文件内容插入函数

文件内容删除函数

七、FILE结构体以及缓冲区


一、文件与文件流

在操作系统中,为了统一对各种硬件的操作,简化接口,不同的硬件设备也都被看成一个文件。对这些文件的操作,等同于对磁盘上普通文件的操作。有些输入输出函数不需要你指明到底读写哪个文件,系统已经为它们设置了默认的文件,当然也可以更改,例如让 printf 向磁盘上的文件输出数据。

文件

硬件设备

stdin

标准输入文件,一般指键盘;scanf()、getchar() 等函数默认从 stdin 获取输入。

stdout

标准输出文件,一般指显示器;printf()、putchar() 等函数默认向 stdout 输出数据。

stderr

标准错误文件,一般指显示器;perror() 等函数默认向 stderr 输出数据(后续会讲到)。

stdprn

标准打印文件,一般指打印机。

操作文件的正确流程为:打开文件 --> 读写文件 --> 关闭文件。文件在进行读写操作之前要先打开,使用完毕要关闭。

文件流

所有的文件(保存在磁盘)都要载入内存才能处理,所有的数据必须写入文件(磁盘)才不会丢失。数据在文件和内存之间传递的过程叫做文件流,类似水从一个地方流动到另一个地方。数据从文件复制到内存的过程叫做输入流,从内存保存到文件的过程叫做输出流。

文件是数据源的一种,除了文件,还有数据库、网络、键盘等;数据传递到内存也就是保存到C语言的变量。我们把数据在数据源和程序(内存)之间传递的过程叫做数据流(Data Stream)。相应的,数据从数据源到程序(内存)的过程叫做输入流(Input Stream),从程序(内存)到数据源的过程叫做输出流(Output Stream)。

输入输出(Input output,IO)是指程序(内存)与外部设备(键盘、显示器、磁盘、其他计算机等)进行交互的操作。几乎所有的程序都有输入与输出操作,如从键盘上读取数据,从本地或网络上的文件读取数据或写入数据等。通过输入和输出操作可以从外界接收信息,或者是把信息传递给外界。

打开文件就是打开了一个流。

二、文件的打开与关闭

文件的打开

所谓打开文件,就是获取文件的有关信息,例如文件名、文件状态、当前读写位置等,这些信息会被保存到一个 FILE 类型的结构体变量中。

格式:

FILE *fp = fopen("filename", "mode");

filename为文件名(包括文件路径),mode为打开方式,它们都是字符串。fopen() 会获取文件信息,包括文件名、文件状态、当前读写位置等,并将这些信息保存到一个FILE类型的结构体变量中,然后将该变量的地址返回。定义一个 FILE 类型的指针 fp 接收 fopen() 的返回值,FILE是在stdio.h头文件中定义的一个结构体,用来保存文件信息。

打开方式(mode):

r(read):读,凡用“r”打开一个文件时,该文件必须已经存在

w(write):写

a(append):追加

t(text):文本文件,可省略不写

b(banary):二进制文件,如果没有“b”字符则文件以文本方式打开

+:读和写

打开方式

说明

r

以只读方式打开文件,只允许读取,不允许写入。该文件必须存在。

r+

以读/写方式打开文件,允许读取和写入。该文件必须存在。

rb+

以读/写方式打开一个二进制文件,允许读/写数据。

rt+

以读/写方式打开一个文本文件,允许读和写。

w

以只写方式打开文件,若文件存在则长度清为0,即该文件内容消失,若不存在则创建该文件。

w+

以读/写方式打开文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。

a

以追加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留(EOF符保留)。

a+

以追加方式打开可读/写的文件。若文件不存在,则会建立该文件,如果文件存在,则写入的数据会被加到文件尾后,即文件原先的内容会被保留(原来的EOF符 不保留)。

wb

以只写方式打开或新建一个二进制文件,只允许写数据。

wb+

以读/写方式打开或建立一个二进制文件,允许读和写。

wt+

以读/写方式打开或建立一个文本文件,允许读写。

at+

以读/写方式打开一个文本文件,允许读或在文本末追加数据。

ab+

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值