C语言文件读写操作

北城以北 提交于 2021-01-13 15:17:26

前言

上一章节主要讲解结构体内存对齐问题,本章节主要讲解C语言文件操作,全面解析C语言文件操作。

C语言文件

通常,文件用于在计算机中存储用户数据。换句话说,计算机使用文件存储数据。我们可以如下定义:文件是存储在辅助存储器(如计算机的haddisk)中的数据的集合。

C语言支持两种类型的文件,它们如下:

  • 文本文件(或)ASCII文件

  • 二进制文件

文本文件(或)ASCII文件

包含数字,字母和符号等数据的ASCII码的文件称为文本文件(或)ASCII文件。

二进制文件

含字节(0和1)形式的数据的文件称为二进制文件。通常二进制文件是文本文件的编译版本。

C语言文件操作

以下是用C语言编写的文件上执行的操作.

  • 创建(或)打开文件

  • 从文件读取数据

  • 将数据写入文件

  • 关闭文件

以上所有操作都是使用C语言中可用的文件处理功能执行的。我们将讨论文件处理功能。

打开文件

要创建新文件或打开现有文件,我们需要创建FILE类型的文件指针。以下是用于创建文件指针的示例代码

FILE *f_ptr ;

我们使用预定义的方法fopen()创建新文件或打开现有文件。可以使用不同的模式打开文件。考虑以下代码:

FILE *f_ptr ; f_ptr = fopen("abc.txt", "w") ;

上面的示例代码创建一个名为abc.txt的新文件(如果该文件不存在),否则将以写入模式打开。在C语言中,可以使用不同的模式来打开文件,这些模式如下所示:

注意

  • 二进制文件读写请使用rb,wb,ab,rb +,wb +和ab +

  • w方式打开文件,文件不存在具有创建文件的功能,文件存在清空文件内容打开

  • a方式打开文件,追加模式打开文件,不清空文件中的数据

文件读写

C语言存在以下文件读写操作。

  1. fgetc()+fputc():字符方式读写

  2. fgets()+fputs():字符串方式读写

  3. fscanf()+fprintf():格式化读写

  4. fread()+fwrite():字节流读写

C语言中的字符读写方式示例程序

注意:一般文件打开, 是要判断打开文件是否成功的,因为篇幅问题这里就省略掉

C语言中的字符串读写方式示例程序


注意:字符串读写,会为读取的内容末尾加上'\n'

C语言中的格式化读写方式示例程序

格式化读写其实是一种表格数据

C语言中的字节流读写方式示例程序

文本文件中显示的内容是乱码,很正常的情况,能成功读写出来即可。

文件指针操作函数

fseek函数

函数原型:int fseek(FILE *stream, long offset, int pos);

stream:文件指针。

offset:偏移量。

pos:指偏移方式。有如下三种值可选:

  • SEEK_SET 从距文件开头offset 位移量为新的读写位置.

  • SEEK_CUR 以目前的读写位置往后增加offset 个位移量.

  • SEEK_END 将读写位置指向文件尾后再增加offset 个位移量.

说明:当pos值为SEEK_CUR 或SEEK_END 时, 参数offset 允许负 值的 出现.

给出两种比较特别的使用方式

  1. 将文件指针移动到开头:fseek(fd, 0, SEEK_SET);

  2. 将文件指针移动到结尾:fseek(fd, 0, SEEK_END);

返回值:调用成功返回0,失败返回-1,errno会存放错误代码。

ftell函数

函数原型:long ftell(FILE *stream);

返回值:文件指针相对于文件开头的偏移量。

rewind函数

函数原型:void rewind(FILE *stream);

feof函数

函数原型:int feof(FILE *stream);

返回值:如果已经到达文件的结尾(已经将文件的最后一个字符都读走了),返回0,否则返回非0数字。

EOF

是文本文件结束的标志。在文本文件中,数据 字符的ASCⅡ码值的形式存放,普通字符的ASCⅡ码的范围是32到127(十进制),EOF的16进制代码为0XFF(十进制为-1),因此可以用EOF作为文件的结束标识。当把数据以二进制的形式存放到文件中时,就有可能会将数字-1存放到文件中,此时继续根据EOF来判断文件是否结束就会出问题,为了解决这个问题,ASCI C 就提供了feof 函数。

尾言

作业:把以下表格数据存储到文件(信息数可少量,词条需齐全)

哪里有什么老天的眷顾,所谓的幸运和成功都源自你自身的努力和付出。请记住,你现在多走的每一步都在拉开着你和别人的差距。要做,就做生活的强者。

好了今天的知识到这里就结束了!如果有学到知识的同学们,可以留言学到了哦!如果可以的话也是可以一键三连,关注加转发和点赞。



本文分享自微信公众号 - C语言编程基础(goodStudyCode)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!