【C语言】文件基本操作(下)

简介: 大家好!我是保护小周ღ,本期为大家带来的是文件的基本操作,格式化的形式读写文件,二进制的形式读写文件,标准输入、输出流,再认识一下sprintf(),sscanf(),以及文件定位等方面的知识。


 image.gif

大家好!我是保护小周ღ,本期为大家带来的是文件的基本操作,格式化的形式读写文件,二进制的形式读写文件,标准输入、输出流,再认识一下sprintf(),sscanf(),以及文件定位等方面的知识。

image.gif


上期我们基本了解了文件读写字符数据的基本使用方法以及标准的书写格式,本来带大家学习更深层次文件操作,我们先从格式化读写函数开始;

没有学习文件基本操作(上)的朋友,也可以通过博主的链接访问学习:文件基本操作(上)_保护小周ღ的博客-CSDN博客


四、文件的顺序读写

4.5 格式化写—fprint()

fprintf()函数的功能与printf()函数的功能相似,都是格式化读写函数,两个函数的区别在于:printf(),针对的是标准输出流-stdout(显示器)

fprintf()可以是针对标准输出流,也可以是我们指定的流,文件流

首先我们先来观察一下两个函数的参数:

int printf(const char *format[,argument]...);
int fprintf(FILE *stream,const char *format[,argument]...)

是不是特别像,fprintf()函数的调用格式为:fprintf(文件指针,格式字符串,输出表列);

应该有点懵吧?那我们运用到程序里看看区别:

第一步,我们定义一个结构体变量。

image.gif

第二步,我们录入信息,这里为方便大家观察,我直接在创建信息录的时候输入数据并调用函数打印信息。

image.gif

第三步,我们运用printf()打印信息,fprintf()写入信息至文件

image.gif

这样会不会容易理解一些?当然我们也可以运用循环写入更多的信息。且往下瞧,待会再去实现;


4.6 格式化读—fscanf()

fscanf()函数的功能与scanf()函数的功能相似,都是格式化读写函数,两个函数的区别在于:scanf()针对的是标准输入流stdio(键盘)

fscanf()可以是针对标准输入流,也可以是我们指定的流,文件流

两个函数的参数同样类似,fscanf()函数的调用格式为:fscanf(文件指针,格式化字符串,输入列表);

可能大家还是不容易理解参数是什么,那大家看看这样是不是就能好理解一点:

fscanf(fp,"%d %f %s",&d,&c,str);//这里大家注意,如果参数是变量,我们就一定要加取地址符‘&’,如果是数组就可以不用加;

image.gif

我们再用代码看看具体是怎么一回事:

第一步,我们定义一个结构体变量。image.gif

第二步,我们调用函数把之前的fprintf()函数写入文件的信息读取出来

image.gif

第三步,实现

image.gif

成功将数据从文件中读出!


4.7 标准输入、输出流

stdin:标准输入流(键盘)

stdout:标准输出流 (显示器,屏幕)

我们利用格式化输入输出函数简单介绍一下,了解一下即可;

image.gif

是不是觉得自己离大牛又近了一步?不急不急咱接着来。

先给大家补充一下 文件怎样写入信息或读出信息,当给文件写入数据时,最先应该在输出缓冲区,等缓冲区满了再输出到磁盘保存,当从文件里读取信息时,数据应先到达输入缓冲区,然后再给到程序对应的数据类型变量等。

image.gif


4.8 以二进制的形式写文件—fwrite()

我们先介绍一下函数的参数:

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

image.gif

我们结合代码来看看具体是怎么使用的:

老样子先定义结构image.gif

为了方面理解代码,我这里在定义的时候直接录入信息,并调用函数

image.gif

实现:

image.gif

可恶让fwrite()装到了*****


4.9 以二进制的形式读文件—fread()

同样是先介绍参数:

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

是不是在哪里见过?没错!且看fwrite()函数的参数:

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

用句话来形容,fread从流里读取count个size大小的数据,放到buffer里面去。

image.gif

先利用fwrite()写入数据,再利用fprintf()读取数据;

我们看看这个两个函数再实际运用中的表现:

image.gif



image.gif

这样我们就可以做到程序结束时,我们保存信息到文件,等程序重新运行时我们可以从文件里加载信息。


4.10 sscanf() and sprintf()

我们简单的认识一下这两个函数:

sscanf()函数是从字符串里读取格式化的数据

sprintf()函数是把格式化的数据输出到(存储到)字符串中

sprintf()的使用

image.gif

我们根据程序一句话介绍参数:信息存放在哪里,以什么样的格式,从哪里读取信息

注意数据类型已经是字符串了!


sscanf()的使用

image.gif

我们根据程序一句话介绍参数:sscanf(),从buffer字符数组中,读取什么样的格式,放到哪里去。

到这里我们这期也接近了尾声,总结一下输入,出入函数之间的细微差别:

scanf/printf 是针对标准输入流/标准输出流的格式化输入/输出语句;

fscanf/fprintf 是针对所有输入流/输出流的格式化输入/输出语句;


五、文件的随机读写

前面介绍的文件的读写方式都是顺序读写,都是只能从头开始,如果我们只要求读写文件中某一部分信息,就没有办法了,这样我们就要用到可以移动文件指针位置的函数,称之为文件定位,常用的主要有rewind() and fseek()函数

rewind()函数我们前面(文件基本操作上)也使用过,函数调用形式为:rewind(文件指针);

功能是将文件指针位置移动到文件首。

fseek()函数用来移动文件内部的指针位置;函数调用形式为:fseek(文件指针,位移量,起始点);

位移量:如果用常量表示位移量的时候,要求后缀加'L'。

起始点:规定的起始点有3种,文件首,文件当前位置,文件尾。其表达方式如下:

image.gif

例句的意义为:把文件指针的位置移到离文件首100个字节处。另外,fseek函数一般用于二进制文件。


通过对文件基本操作(下)的学习,我们应该对深层次的文件的基本读写有了一个全面的认识

希望对大家有所帮助。

感谢每一个观看本篇文章的朋友,更多精彩敬请期待:保护小周ღ  *★,°*:.☆( ̄▽ ̄)/$:*.°★*

遇见了你,所有的星星都落在了我的头上image.gif

相关文章
|
24天前
|
Linux C语言
C语言 文件IO (系统调用)
本文介绍了Linux系统调用中的文件I/O操作,包括文件描述符、`open`、`read`、`write`、`lseek`、`close`、`dup`、`dup2`等函数,以及如何获取文件属性信息(`stat`)、用户信息(`getpwuid`)和组信息(`getgrgid`)。此外还介绍了目录操作函数如`opendir`、`readdir`、`rewinddir`和`closedir`,并提供了相关示例代码。系统调用直接与内核交互,没有缓冲机制,效率相对较低,但实时性更高。
|
1月前
|
存储 C语言
【C语言】C语言-学生成绩管理系统(源码+数据文件+课程论文)【独一无二】
【C语言】C语言-学生成绩管理系统(源码+数据文件+课程论文)【独一无二】
39 15
|
1月前
|
存储 C语言
【c语言】职工信息管理系统 包含读取写入txt文件,职工信息的增删改查
【c语言】职工信息管理系统 包含读取写入txt文件,职工信息的增删改查
|
1月前
|
存储 自然语言处理 程序员
【C语言】文件的编译链接和预处理
【C语言】文件的编译链接和预处理
|
1月前
|
存储 C语言
【C语言】C语言-设备管理系统(源码+数据文件)【独一无二】
【C语言】C语言-设备管理系统(源码+数据文件)【独一无二】
|
2月前
|
Linux C语言 Windows
C语言文件编程-Linux环境下运行
本文介绍了在Linux环境下使用C语言进行文件编程时的两种主要接口:C标准库函数与Linux系统调用。C标准库提供了`fopen`, `fread`, `fwrite`, 和 `fclose`等函数,适用于普通文件操作;而Linux系统调用如`open`, `read`, `write`, 和 `close`则更适合处理设备文件,同时也可用于普通文件。这两种方法的主要区别在于前者使用文件指针,后者使用文件描述符。文章还给出了两个示例程序:一个使用C标准库函数实现文件复制,另一个则使用Linux系统调用完成相同任务。
37 2
|
3月前
|
编译器 C语言
C语言编译详解:GCC分步编译与一次编译多个文件
C语言编译详解:GCC分步编译与一次编译多个文件
290 2
|
3月前
|
存储 C语言
C语言文件读写详解
C语言文件读写详解
|
3月前
|
存储 编译器 数据库
【再识C进阶5(上)】详细介绍C语言文件操作——文件是用于存储数据
【再识C进阶5(上)】详细介绍C语言文件操作——文件是用于存储数据
|
3月前
|
Java 程序员 Linux
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
探索C语言宝库:从基础到进阶的干货知识(类型变量+条件循环+函数模块+指针+内存+文件)
38 0