C语言:文件IO

目录

文件IO

数据存储的硬件介绍

文件

文件操作

1、打开文件

1.1参数介绍

1.2打开方式

1.3返回值

2、文件写入

2.1参数介绍

2.2返回值

3.文件读取

3.1参数介绍

3.2返回值

4.操作判断

4.1功能

4.2参数介绍

4.3返回值

5.读取判断

5.1功能

5.2参数介绍

5.3返回值

6.位置跳转

6.1功能

6.2参数介绍

6.3返回值

7.关闭文件

7.1功能

7.2参数介绍

7.3返回值

文件IO

IO:可以分为两种:input和output(IO),代表着文件的输入输出。

input:输入,代表先硬盘输入数据。

output:输出,将数据写入外部设备。

文件IO:在C语言中主要指的是硬盘的IO。

数据存储的硬件介绍

硬盘(磁盘):存储数据的硬件,拥有持久性,意味着断电后数据依然存在。

内存条:吞吐量更大的存储硬件,具有易失性,意味着断电后数据消失不见。

所以从功能和性质上而言,我们将硬盘作为数据的持久化存储地段,将内存条作为数据处理的中间地带。

文件

文件的提出:为了对存储在硬件中的数据加以区分和便于数据的管理,我们从上层的角度提出了新的概念叫做:文件。我们将通过文件来对数据进行应用层面的管理。

文件的操作:以文件为单位对磁盘进行操作。

当我们通过程序对文件进行操作时,我们首先需要使用程序文件描述出来,通过这些描述性内容对磁盘指定位置的数据进行操作。

文件操作

1、打开文件

FILE *fopen(char *filename, const char *mode);

1.1参数介绍

其中,filename是文件名,代表着用户对文件的一种区分;mode是文件的打开方式(打开方式决定了对文件进行的操作)。

1.2打开方式

r:以只读方式打开文件;(若文件不存在会出错)

w:以只写的方式打开文件;(若文件不存在会自动创建新文件,若文件已经存在则会清空文件原有内容)

a:以追加写的方式打开文件;(若文件不存在会创建新文件,若文件已经存在则写入数据时总是会将新的数据追加到文件末尾)

r+:以可读可写的方式打开文件;(若文件不存在就可以出错,若文件已经存在会从文件起始位置进行操作,会覆盖文件原有内容)

w+:以可读可写的方式打开文件;(若文件不存在会创建新文件,若文件已经存在则会清空文件原有内容)

a+:以可读和追加写的方式打开文件;(若文件不存在会创建新文件,若文件已经存在则写入数据时总是将新的数据追加文件末尾)

b:以二进制形式打开文件,默认是以文本的形式打开。(在文本模式下,\n操作会被解释为\r\n,代表换行和光标移动)

……

无论通过以上任何一种的打开方式,文件打开后,默认的读写位置都在文件内容的起始位置。(注意a和a+是以从末尾开始追加)

1.3返回值

文件打开成功则会返回文件流指针,即文件的操作句柄;文件打开失败则返回NULL。

2、文件写入

size_t fwrite(const char *buffer, size_t size, size_t count, FILE *stream);

2.1参数介绍

其中,buffer 是一块内存空间的首地址,表示把该空间的数据写入到文件之中;

size是该块内存空间的大小;count是块空间的个数;(size * count便是将buffer中多少的数据写入到文件之中,即写入数据总量)

stream是fopen返回的文件流指针,标识我们需要操作哪一个文件。

2.2返回值

文件写入成功返回文件的完整块个数, 失败返回小于count大小的数字。

3.文件读取

size_t fread(void *buffer, size_t size, size_t count, FILE *stream);

3.1参数介绍

其中,buffe是一块内存空间的首地址,表示从文件读取到的数据放到内存buffer这块空间之中。

size是该块内存空间的大小;count是块空间的个数;(size * count便是实际中读取到的数据,即读取数据总量)

stream是fopen返回的文件流指针,标识我们需要操作哪一个文件。

3.2返回值

读取成功则返回设定的全部完整块个数(count),失败则返回读取到的完整快个数。

值得注意的是,我们在使用fread读取数据的时候,可以将size设置为1,将count设置为需要读取的数据长度。

如此只要读取到数据则返回值总是大于0的,否则当返回值为0(没有读取到一个完整的内存块)的时候我们无法确定是否读取到数据。

4.操作判断

int ferror(FILE *stream);

4.1功能

用于判断上一步文件操作是否成功,通常可以用于fread之后判断文件是否读取成功。

4.2参数介绍

stream是fopen返回的文件流指针,标识我们需要操作哪一个文件。

4.3返回值

成功则返回true(非0),失败则返回false。

5.读取判断

int feof(FILE *stream);

5.1功能

用于判断当前读取的文件内容(或者读写的文件内容)是否到达文件末尾。

5.2参数介绍

stream是fopen返回的文件流指针,标识我们需要操作哪一个文件。

5.3返回值

到达文件末尾则返回true(非0),未到达则返回false。

6.位置跳转

int fseek(FILE *stream, long offset, int origin);

6.1功能

将文件的读写位置进行跳转,即从origin位置偏移offset个字节处。(断点续传)

6.2参数介绍

其中,stream是fopen返回的文件流指针,标识我们需要操作哪一个文件;offset是偏移量;origin是相对偏移的起始位置。

6.3返回值

成功则返回0,失败则返回非0。

7.关闭文件

int fclose(FILE *stream);

7.1功能

关闭文件,释放资源

7.2参数介绍

stream是fopen返回的文件流指针,标识我们需要操作哪一个文件。

7.3返回值

成功则返回0。

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值