万字【文件操作讲解】(知识点全面有序,带你一篇文章学懂什么是文件操作)2

简介: 万字【文件操作讲解】(知识点全面有序,带你一篇文章学懂什么是文件操作)

(二、)fputs(写入)函数的使用

(1.)基本使用形式:int fputs(const char * string,FILE * stream)

意思就是写一个字符串到文件流中去


(2.)具体使用如图:

13.png


(3.)所以此时我就将我想要输入到这个文件中的信息给输入到我的相应文件中了(并且此时是直接操作一行数据,不像是fputc每次只可以操作一个字符)

(4.)同理此时我也可以直接从我的键盘中读取信息

#include<stdio.h>
int main()
{
  char arr[1024] = { 0 };
  fgets(arr,1024, stdin);//从标准输入流读取
  fputs(arr, stdout);//输出到标准输出流
  //等价于下面这两个函数的使用
  gets(arr);
  puts(arr);
  return 0;
}

(5.)这些就是fgers函数和fputs函数的使用

4.fprintf 和 fscanf 格式化函数的使用

首先使用目的:是为了不仅可以写入读取字符,还可以将那些具有格式的数据也写到文件中去

(一、)fprintf函数(格式化输出)的使用

(1.)基本使用形式,对比于printf (标准输出函数)的使用形式,如图:


14.png

15.png

这边拿过来再做一个比较,意思就更加清楚

int printf (const char * format)

int fprintf(FILE * stream,const char * format)

(2.)显然一眼可见我的fprintf函数在使用上只是多了一个FILE * stream,这个东西而已,其实也就是说明printf只能针对标准输出流中(stdout)使用,而我的fprintf则不仅可以针对标准输出流使用,还可以针对我所指定的任意流使用(所以高下立判,我的fprintf 针对的流非常多,是高级的)


(3.)所以具体使用如下:


16.png


(4.)


1.上面主要的那句 fprintf(ps,“%d %f %s”, s.n, s.score, s.arr);的意思再讲一遍,就是我把格式化数据(就是各种各样类型的数据),都可以写进我的任意的我指定的文件流当中(ps)

2. 如果理解不了可以借用printf 的使用形式进行对比理解 printf(“%d %f %s”, s.n, s.score, s.arr);意思为把这些格式化的数据(各种类型的数据)给输出到我的标准输出(stdout中)(也就是屏幕上),所以此时printf 默认输出的一个流就是标准输出流



(5.)所以此时我的fprintf和printf就显得非常的高级了(因为它们可以读取或者输出各种类型的数据),不像是fputs,fgets,fputc,fgetc 这类函数,只能进行字符串或者字符的输入和输出(捞)

(二、)fscanf函数(格式化输入)的使用


(1.)首先还是基本使用类型,与scanf(标准输入函数)对比,如图:


17.png18.png


这边还是一样拿过来对比一下:

int fscanf(FILE * stream,const char * format)

int scanf(const char * format)

(2.)显然一个道理,scanf只能对我的标准输入流进行使用,而我的fscanf不仅……而且……


(3.)具体使用如下:


19.png


(4.)所以此时我们就可以非常顺利的用fprintf 将我的格式化数据放入我的文件流中(ps),也可以非常顺利的用 fscanf 将我的格式化数据从文件流(ps)中拿出来使用

(三、)fprintf和fscanf函数对标准输入输出流的使用

20.png


这样就是标准输入输出的使用

5.sscanf 和 sprintf 函数的使用

(一、)sscanf函数的基本使用类型如下:

21.png

(1.)让我这个英语大高手来给你们介绍一下是什么意思,首先Read formatted data from string

这句英语的意思就是:从一个字符串中读取一个格式化的数据

(2.)使用方法如下:


22.png


(3.)注释已经非常清晰了,但是我们还得拿出来讲一遍


sprintf(arr, “%d %f %s”, s.n, s.score, s.arr); 这个的意思就是把格式化的数据转换成字符串存储到arr这个字符数组中

sscanf(arr, “%d %f %s”, &(tmp.n), & (tmp.score), tmp.arr); 这个的意思就是从arr中读取格式化的数据到tmp中


(二、)sprintf 函数的基本使用类型如下:


23.png


(1.)这个使用类型的意思就是:写一个格式化的数据到字符串中去(由这句英语Write formatted data to string得到)

(2.)使用方法如下:

24.png


(3.)注意点主要就还是它的使用方法:将一个格式化的数据放到字符串中去,也就是这句

sprintf(arr,“%d %f %s”, s.n, s.score, s.arr);代码的理解,我将我的结构体中的各种类型的数据都给放到我的 arr 这个字符串数组当中


(三、)总结 sscanf 和 sprintf 的用法


上述我们讲完了sscanf 和 sprintf 的用法,接下来总结一下:


(1.)sscanf 是从字符串中读取格式化的数据

(2.)sprintf 是把格式化的数据转换成字符串然后输出存储到字符串数组中


6.scanf / fscanf / sscanf 和 printf / fprintf / sprintf 的对比

scanf / fscanf / sscanf

printf / fprintf / sprintf


(1.)scanf / printf 是针对标准输入输出流的格式化输入输出语句

(2.)fscanf / fprintf 是针对所有输入输出流的格式化输入输出语句

(3.)sscanf / sprintf 中的sscanf 是从字符串中读取格式化的数据,而sprintf 是把格式化的数据转换成字符串然后输出存储到字符串数组中


7.fread(二进制输入) 和 fwrite(二进制输出)函数的使用

(一、) fwrite(二进制输出)

(1.)基本的使用形式如图:

25.png

(2.)size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );这句代码的意思就是Write block of data to stream这个的意思:中文意思就是从一个数组中读取多少大小,多少数量的数据到我的文件流中


(3.)具体使用方法就是如图:


26.png

此时就是我使用这个二进制输出函数在我的流文件中写入了一个二进制形式的代码,所以当我打开我的文件时,此时文件中显示的就是一推的二进制的随机值(我看不懂的东西)

(二、)fread(二进制输入)函数的使用

(1.)使用的基本形式:

27.png


(2.)意思为从一个文件流中读取一个多少大小,多少个数的数据到我的数组中去

(3.)具体使用方法如下:

28.png


此时我就成功的把我的指定流文件中的二进制文件给读取出来了

8.fseek函数的使用(文件的随机读取)

(1.)基本的使用形式:

29.png(2.)主要的意思就如int fseek ( FILE * stream, long int offset, int origin ); 意思就是Reposition stream position indicator,中文意思:就是根据文件指针位置的偏移量来定位文件指针(以起始位置和偏移量来定位此时文件指针的位置)


30.png


然而我要如何来确定我的起始位置呢?所以这个函数在使用的时候关于起始位置(origin)就有3个选项,如上图表格中所示(SEEK_SET(文件的起始位置)、SEEK_CUR(文件指针的当前位置)、SEED_END(文件的末尾位置))通过对这些位置的选择,我来确定我此时的文件的起始位置


(3.)具体使用如下图所示:


31.png


(4.)首先我在我的流文件中放入了abcdefghijkl的这些字符,现在使用fseek这个函数对我的流文件进行操作,以当前位置为起始位置进行皮偏移量为2的偏移,所以此时进行偏移后就可以很好的使我的这个文件指针指向我的 c 这个字符

(5.)所以这个fseek函数是一个可以进行偏移操作的函数(非常的特殊,因为别的函数都不行),这样的话只要我了解文件中有什么内容,我就可以很容易的使用fseek这个函数或得了


四、总结:

(1.)关于文件操作的函数算是大致讲完了,还有一小部分的有关文件操作的只是还没有讲到,谁让明天要体测,哎!所以就先写到这吧!

(2.)总的说就是要去多去用,只有这样才可以更好的知道如何掌握文件的各种操作

相关文章
|
安全
统一召回引擎
统一召回引擎
172 0
|
9月前
日常答题赢奖励单页HTML源码
日常答题赢奖励单页HTML源码
115 25
|
Python
Python tkinter 初探Toplevel控件搭建父子窗口
Python tkinter 初探Toplevel控件搭建父子窗口
464 0
Python tkinter 初探Toplevel控件搭建父子窗口
|
前端开发 Java 程序员
【JAVA】<GUI编程>AWT & Swing 图形化编程库
【1月更文挑战第19天】【JAVA】<GUI编程>AWT & Swing 图形化编程库
|
人工智能 搜索推荐 大数据
元宇宙与应用层之间存在着紧密的联系和互动
元宇宙的应用层构建多样化服务如虚拟社交、游戏、教育和会议,实现用户深度交互与个性化定制。VR/AR提供沉浸体验,云计算和大数据确保高效运行,AI助力个性化服务。两者相互促进,共创价值,形成生态循环,驱动元宇宙持续发展。
|
存储 前端开发
什么是mvc
什么是mvc
454 0
|
存储 监控 安全
为什么要做服务器监控?
为什么要做服务器监控?
220 0
|
Web App开发 搜索推荐 Linux
这款浏览器,号称“世界最快”!
提起浏览器,大多数同学都不陌生。 现在浏览器市场可谓是让人眼花缭乱,
这款浏览器,号称“世界最快”!
|
弹性计算 运维 安全
云企业网CEN2.0产品发布-构建智能全球化云网络
近几年来,随着国家政策的引导和传统企业上云的加速,客户对云上全球化网络的要求越来越高,第一代云企业网已经无法满足客户的诉求。在此背景下,阿里云第二代云企业网 CEN 2.0 应运而生。
云企业网CEN2.0产品发布-构建智能全球化云网络
|
监控 Python
python 办公自动化系列 (1) 从22053条数据中统计断网次数并计算平均断网时间
找到通网后的第一个日志和断网前的最后一个日志,然后提取 date 列的时间做减法,获得本次断网时间,之后用同样的方法统计每次的断网时间,最后计算总的断网次数和断网时间的平均值
322 0
python 办公自动化系列 (1) 从22053条数据中统计断网次数并计算平均断网时间