文件操作详解(超级详细)-程序员宅基地

技术标签: c语言  Powered by 金山文档  开发语言  

正常我们的程序在执行的时候程序结束后,会将所有数据清楚,那么我们应该如何保存数据呢?这里我们就需要用文件操作。

一、文件的打开和关闭

1.文件打开、关闭函数—fopen、fclose

//打开文件
FILE * pf = fopen ( const char * filename, const char * mode );
//关闭文件
fclose ( pf);
  1. FILE是C语言提供的文件类型,是一个结构体类型。FILE*是文件指针类型,通过该指针可以对文件进行一系列的操作。

  1. fopen第一个参数是打开的文件名,可以指输入该文件名,也可以输入文件的绝对路径。如c:\code\test.txt.

  1. fopen第二个参数mode为打开文件的方式,常见的有下面的几种类型:

  1. 在对文件进行相关操作后应该及时使用fclose函数进行关闭,以便及时释放资源。

  1. 若fopen打开文件失败,则返回空指针,因此打开文件后应该做必要的判断。对于fclose,如果成功返回值为0,否则返回EOF。

二、常见的文件操作函数

  1. 字符输入函数-fgetc

fgetc函数返回文件指针指向的字符,并使指针向下一个字符偏移。若想用此函数打印文件全部内容,可用while((ch=fgetc(pf))!=EOF)循环来控制,这是因为当指针指向文件结尾,函数返回值为-1。

  1. 字符输出函数-fput

由于要输出数据,故文件打开方式为"w",此时如图将字符c输出到了文件内。

mode的一些注意事项:

用“r”的方式打开文件,若文件不存在,则会返回一个空指针;若用“w”或“a”打开文件,若没有该文件则会创建一个文件,进行操作,当文件存在的时候,写入也会把原来的内容覆盖掉。

  1. 字符串输入函数-fgets

fgets需要三个参数,第一个输出字符串,第二个是输出的字符串长度,第三个操作文件地址。

为何只打印了四个字符呢?因为fgets会在末尾添加一个“\0”作为结束标志。

  1. 字符串输出函数-fputs

fputs只包含两个参数,第一个输出的字符串,第二个操作的文件地址。

  1. 二进制输入函数-fread

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)

ptr -- 这是指向带有最小尺寸 size*nmemb 字节的内存块的指针。

size -- 这是要读取的每个元素的大小,以字节为单位。

nmemb -- 这是元素的个数,每个元素的大小为 size 字节。

stream -- 这是指向 FILE 对象的指针,该 FILE 对象指定了一个输入流

  1. 二进制输出函数-fwrite

fwrite fread是成块的对二进制文件进行读写,如以二进方式处理文件,文件里的内容除了字符型以asc码显示的你能用记事本打开时能看明白,其它数值类型都是按其在内存里的二进制格式存储的,以asc码的形式强制解释,就全是乱码。

  1. 格式化输入函数-fscanf

将文件内容以格式化输入的方式赋值给变量,再进行打印。

顺便一提sscanf函数,它是将字符串内容以格式化方式输出,其第一个参数是指向字符数组的指针 。

8.格式化输入函数-fprintf

基本与printf函数参数相同,只是多了一个文件类型指针的参数,能以格式化输出的方式将内容输出到文件内。

顺便提一下sprintf()函数。fprintf函数能将数据内容向所有输出流输出,而sprintf函数便是将数据内容保存为字符串,其第一个参数是指向字符数组的指针。

三、文件位置指针操作函数

  1. 返回指针偏移量函数-ftell

以"r"的方式打开文件,位置指针初始时在文首,偏移量为0,而每进行一次字符读写,偏移量便加一。 ftell函数能反映当前文件位置指针的位置。

  1. 返回指针原点函数-rewind

使用rewind后,文件指针的起始位置变成了原点0的位置。

  1. 定位文件指针函数-fseek

参数一文件类型指针,参数二指针偏移量,参数三初始偏移位置,包括SEEK_SET为文件开头位置,SEEK——CUR为当前位置指针的位置,SEEK_END则为文件结尾位置。

四、文件缓冲区

文件是指存储在外部存储介质上的、由文件名标识的一组相关信息的集合。由于CPU 与 I/O 设备间速度不匹配。为了缓和 CPU 与 I/O 设备之间速度不匹配矛盾。文件缓冲区是用以暂时存放读写期间的文件数据而在内存区预留的一定空间。使用文件缓冲区可减少读取硬盘的次数。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/loss_rose777/article/details/128959518

智能推荐

数据分析师的就业趋势及发展前景怎么样_数据分析师就业现状-程序员宅基地

文章浏览阅读1.8k次。数据分析师的就业趋势及发展前景怎么样?根据第三方数据显示,数据分析师的需求量将增长幅度大。即使你不是数据分析师,掌握数据分析技能也是未来必不可少的工作技能之一。国内某大型招聘平台调研数据分析师平均薪酬为9724K左右。_数据分析师就业现状

appium设置会话时间,可以超长时。Open Application-程序员宅基地

文章浏览阅读1.2k次。转载于:https://www.cnblogs.com/1234abcdttttjy001/p/10650408.html_appium 连接超时的时间设置

最新版Flink CDC MySQL同步Elasticsearch(一)_the mysql server has a timezone offset (28800 seco-程序员宅基地

文章浏览阅读1.2w次,点赞2次,收藏9次。(需要自行进行构建编译,笔者构建的已经上次至次博客。需要可以进行下载,csdn需要积分下载,无法设置免费的,需要免费版可以直接联系笔者)首先我们要基于Flink CDC MySQL同步MySQL的环境基础上(flink-1.17.1、Java8、MySQL8)搭建。,笔者的Flink CDC MySQL同步Elasticsearch第一篇讲解完毕,希望能帮助到搭建。笔者已经搭建好环境,这里不做具体演示了,如果需要Es的搭建教程情况笔者其他博客。:这是笔者遇到的问题,具体问题具体解决即可。_the mysql server has a timezone offset (28800 seconds ahead of utc) which do

Spring Cloud中间件_springcloud中间件-程序员宅基地

文章浏览阅读1k次。spring cloud 中间件_springcloud中间件

vxe-table实现增加行(push)滚动条到对应行_vxe-table 滚动到某一行-程序员宅基地

文章浏览阅读3.3k次。自己试了vxe-table的官方文档方法,没有成功。最后使用了原生的方法scrollTo()实现了,加入计时器效果更明显 setTimeout(() => { document .getElementsByClassName("vxe-table--body-wrapper")[0] .scrollTo(0, this.$refs.xTable2.tableHeight); }, 500);..._vxe-table 滚动到某一行

Android 程序反编译_@ref/0x7f070000是什么意思-程序员宅基地

文章浏览阅读426次。Apk文件的格式Android application package文件。每个要安装到android平台的应用都要被编译打包为一个单独的文件,后缀名为.apk,其中包含了应用的二进制代码、资源、配置文件等。apk文件实际是一个zip压缩包,可以通过解压缩工具解开。可以用zip解开*.apk文件,下面是一个helloword的apk示例文件。|– AndroidManifest.xml |– ME..._@ref/0x7f070000是什么意思

随便推点

Docker精华问答 | task与executor有什么关系?-程序员宅基地

文章浏览阅读696次。戳蓝字“CSDN云计算”关注我们哦!容器技术是这两年热门的话题,因为容器技术给我们带来了很多方便的地方,节约了不少成本,不管是在运维还是开发上。今天,就让我们来看看关于D..._docker executor

打造黑苹果(二)制作黑mac系统安装U盘-程序员宅基地

文章浏览阅读5.7w次,点赞7次,收藏41次。打造黑苹果(二)制作黑mac系统安装U盘前言在上一篇打造黑苹果(一)组装硬件的选择与组装 中,我们已经给大家在硬件上有了一个建议。如果你已经购买了硬件了,或者你原来的硬件就已经满足了黑MAC的需求,那么,下面就要开始安装黑MAC系统了。如果你不愿意折腾,建议在仓库盘上先安装一个windows的操作系统,然后上淘宝,找一个黑MAC系统安装的店家,花上百十块钱,就可以安装好了,省的自己研究。 在仓库_黑mac

CPU的亲和性_cpu亲和性-程序员宅基地

文章浏览阅读478次。CPU领域中最广为人知的一条定律——摩尔定律:预计18个月会将芯片的性能提高一倍。过去几十年,各大公司致力于提高CPU晶体管密度和提高CPU工作频率,使得CPU的性能提升基本符合摩尔定律。但随着工艺不断发展,晶体管密度提升已经接近物理极限,CPU工作频率也由于功耗和发热的制约而无法继续提升。在基础物理领域没有大的突破的前提下,单核CPU的性能提升日益困难,于是,各大公司将目光投向了通过增加CPU核心数提高性能领域,双核、4核、8核、16核等一系列多核CPU相继问世。_cpu亲和性

Vuforia 云辨认 多图教程_vuforia识别多个图片-程序员宅基地

文章浏览阅读3.2k次。一 创立云辨认库起首在应用云辨认之前我们须要拥有一个KEY 一个KEY对应一个宣布的APP 我们之前注册的基本KEY就可以应用云办事 可是每个月/每个APP用户/每张辨认图有1000次的扫描限制 所以基本的只能支撑我们测试或者极小频率的应用办事的价钱可以参看下图 接下来我们树立一个云辨认库 打开tARget治理页面点击ADD DATABASE添加一个数据库 _vuforia识别多个图片

从《编程之美》买票找零问题说起,娓娓道来卡特兰数——兼爬坑指南_排队找零问题-程序员宅基地

文章浏览阅读3.4k次。转自:从《编程之美》买票找零问题说起,娓娓道来卡特兰数——兼爬坑指南引子:  大约两个月前,我在练习一些招聘的笔试题中,有一道和卡特兰数相关。那时还没来得及开始仔细看《编程之美》,就先翻到那一章节,草草地看了下买票找零的例子和证明并把书上的背下来了事。当然,只靠这个式子是可以解决一些问题的,但不知是《编程之美》的作者有意挖的陷阱来甄别所谓的“Poser”,还是疏忽了没有进一步讨论,又或_排队找零问题

【MATLAB】信号与系统 — 周期矩形(三角形)脉冲信号_matlab周期矩形脉冲信号-程序员宅基地

文章浏览阅读4.5k次。【MATLAB】信号与系统 — 周期矩形(三角形)脉冲信号。_matlab周期矩形脉冲信号

推荐文章

热门文章

相关标签