首页 > 其他分享 >C语言学习笔记 Day16(文件管理--下)

C语言学习笔记 Day16(文件管理--下)

时间:2024-09-04 19:21:26浏览次数:5  
标签:文件 字节 -- 读写 C语言 Day16 offset 缓冲区 移动

Day16 内容梳理:

C语言学习笔记 Day14(文件管理--上)-CSDN博客

C语言学习笔记 Day15(文件管理--中)-CSDN博客

目录

Chapter 10  文件操作

10.5 文件状态

10.6 文件的随机读写 fseek()、rewind()

(1)fseek():移动光标并开始读写

(2)rewind():将光标重置回文件开头

10.7 文件的删除remove()、重命名rename()

(1)删除remove():

(2)重命名、移动位置rename():

10.8 文件缓冲区

(1)基础概念

(2)更新缓冲区


Chapter 10  文件操作

10.5 文件状态

获取文件的大小

10.6 文件的随机读写 fseek()、rewind()

(1)fseek():移动光标并开始读写

之前的文件都是顺序读写,而在可以在随机读写中,改变文件光标的位置。

先创建好一个名为“随机读写.txt”的文本文件,写入如下内容:

fseek()函数的三个参数:文件指针、offset位移数、whence移动的起始位置

offset:往左偏移是负数,往右偏移是正数

whence有三种类型的参数:

SEEK_SET:从文件开头移动offset个字节

SEEK_CUR:从当前位置移动offset个字节

SEEK_END:从文件末尾移动offset个字节

因为文本文件中,每一行的结尾是\r\n(不会显示在文本中),算两个字节,所以算offset的时候需要加上这2个字节。

\r\n存在于除了末尾那行以外的其他行,所以从末尾开始偏移的话不需要考虑\r\n的字节。

代码如下,把三种类型的whence参数都试写了一遍:

上图代码的打印结果如下:正常打印了两行,跳到上一行打印了一下,跳到文件开头行打印了一下,又跳到文件末尾行打印了一下

(2)rewind():将光标重置回文件开头

使用方式:rewind(文件指针)

作用效果等同于fseek(文件指针,0,SEEK_SET)

10.7 文件的删除remove()、重命名rename()

(1)删除remove():

需要注意的是,以这样的方式删除的文件不会进入到回收站中,难以找回,慎用remove()。

删除这个文件:

代码如下:

运行结果: 

文件中也确实没有abc.txt了:

(2)重命名、移动位置rename():

①重命名:

把“解密1.txt”更名为”解密加密的原始语句.txt”

代码和效果如下:

里面的文本没有发生变动,只有文件名被改了。

②移动位置:

把D盘的“加密1.txt”移动至D盘的“Program Files”文件夹中

移动效果:

10.8 文件缓冲区

(1)基础概念

通常用“缓冲文件系统”来处理数据文件。

缓冲文件系统是指系统自动在内存区为程序中每个在使用的文件开辟一个文件缓冲区,暂存从内存向磁盘运输的文件,装满整个缓冲区后才一起送到磁盘中。就像是定时定点到站的公交车一样。

缓冲区的作用是协调低速的输入输出设备和高速的CPU,避免低速的输入输出设备占用CPU,从而解放出CPU并使其能够高效率工作。

缓冲区有两种保存方式,一种是按固定时间间隔保存数据(比如每10秒保存一下),另一种是按固定数据量保存数据(比如每100字保存一下)。

(2)更新缓冲区

不太建议实际写代码时按下图中这样写,因为频繁和硬盘交互会损伤硬盘。最好是手动规定一个字节长度,代码到这个长度了再保存。

一边输入,一边保存到了文本文件中:

标签:文件,字节,--,读写,C语言,Day16,offset,缓冲区,移动
From: https://blog.csdn.net/m0_75036068/article/details/141888589

相关文章

  • CAPL语言
    CAPL(CommunicationAccessProgrammingLanguage)是一种专门用于汽车领域的编程语言,主要用于开发和测试汽车电子控制单元(ECU)中的通信功能。CAPL通常与Vector公司开发的CANoe和CANalyzer工具一起使用,这些工具广泛应用于汽车电子和网络的测试和分析。###1.**CAPL的特点**-**......
  • 在本地通过Docker安装RocketMQ
    拉取镜像&部署这里选用foxiswho/rocketmq:server-4.5.1版本,在官方镜像没出来前,foxiswho是一个比较靠谱的第三方镜像。执行下面的命令直接启动NameServer。dockerrun-d-p9876:9876--namermqnamesrvfoxiswho/rocketmq:server-4.5.1接下来执行下面的命令启动Broker,......
  • 36. 中文字库应用
    一、LVGL字库  LVGL的字体功能是较为强大的:支持UTF-8编码、图标字体、自定义字体、最高8bpp的抗锯齿,等等。值得注意的是,bpp值越大,字体的边缘会越平滑,但其对内存的占用就越多,在界面上进行字体渲染时,绘制速度也会越慢,一般的项目,采用4bpp就足够了。  LVGL支持2种编......
  • 技能自述以及目标
    1.技能树:------------------已掌握的能力------------------∟C/C++编程∟Python编程∟算法知识-排序算法-搜索算法-动态规划-图算法-其他算法∟建模能力-数据建模-数学建模......
  • POJ-1066
    题解告诉我:大意:在一个矩形区域内,有n条线段,线段的端点是在矩形边上的,有一个特殊点,问从这个点到矩形边的最少经过的线段条数最少的书目,穿越只能在中点穿越思路:需要巧妙的转换一下这个问题,因为从一个点到终点不可能“绕过”围墙,只能穿过去,所以门是否开在中点是无所谓的,只要求四周线......
  • Codeforces Round 969 (Div. 1)
    Preface暑假最后几天疑似有点摆过头了,训练也没咋训,CF也没咋打这周末就是网络赛了,虽然名额早就满了,但还是得写写题找下手感不然要被学弟暴打了这场由于是Div.1/2分场,补题就只写Div.1的题了A.IrisandGameontheTree首先考虑快速计算一个01串的贡献,不难发现一段相......
  • 139. 单词拆分(leetcode)
    https://leetcode.cn/problems/word-break/description/classSolution{publicbooleanwordBreak(Strings,List<String>wordDict){//思路较为巧妙,和传统背包定义不同//f[i]表示长度为i的字符串能否被wordDict里的单词凑成//状态转义方......
  • 使用Python模拟TCP/IP协议栈
    1.代码如下importrandomclassApplicationLayer:defsend_data(self,data):print(f"ApplicationLayer:Sendingdata:{data}")returndatadefreceive_data(self,data):print(f"ApplicationLayer:Receiveddata......
  • 洛谷 P5618 堵塞的交通
    洛谷P5618堵塞的交通题意有一个\(2\timesC\)的网格图,需要维护\(3\)种操作。连接相邻的两个格子。将相邻的两个格子断开连接。询问两个格子是否联通。思路1考虑分块。连边时块内使用并查集维护,块与块之间用数组标记。删边块内的边时暴力重构并查集,块之间的边清零......
  • UML class diagrams and UML interaction diagrams
    Assignment1LearningOutcomes&MaterialsThisassignmentisintendedtodevelopandassessthefollowingunitlearningoutcomes:LO1.Iterativelyapplyobject-orienteddesignprinciplestodesignsmalltomedium-sizesoftwaresystems,usingstandard......