分享好友 最新动态首页 最新动态分类 切换频道
第十一章 文件操作_C语言插入、删除、更改文件内容
2024-12-27 14:37

我们平时所见的文件,例如 txt、doc、mp4 等,文件内容是按照从头到尾的顺序依次存储在磁盘上的,就像排起一条长长的队伍,称为顺序文件

除了顺序文件,还有索引文件、散列文件等,一般用于特殊领域,例如数据库、高效文件系统等。

第十一章 文件操作_C语言插入、删除、更改文件内容

顺序文件的存储结构决定了它能够高效读取内容,但不能够随意插入、删除和修改内容。例如在文件开头插入100个字节的数据,那么原来文件的所有内容都要向后移动100个字节,这不仅是非常低效的操作,而且还可能覆盖其他文件。因此C语言没有提供插入、删除、修改文件内容的函数,要想实现这些功能,只能自己编写函数。

以插入数据为例,假设原来文件的大小为 1000 字节,现在要求在500字节处插入用户输入的字符串,那么可以这样来实现
1) 创建一个临时文件,将后面500字节的内容复制到临时文件
2) 将原来文件的内部指针调整到500字节处,写入字符串
3) 再将临时文件中的内容写入到原来的文件(假设字符串的长度为100,那么此时文件内部指针在600字节处)。


删除数据时,也是类似的思路。假设原来文件大小为1000字节,名称为 demo.mp4,现在要求在500字节处往后删除100字节的数据,那么可以这样来实现
1) 创建一个临时文件,先将前500字节的数据复制到临时文件,再将600字节之后的所有内容复制到临时文件
2) 删除原来的文件,并创建一个新文件,命名为 demo.mp4
3) 将临时文件中的所有数据复制到 demo.mp4。


修改数据时,如果新数据和旧数据长度相同,那么设置好内部指针,直接写入即可;如果新数据比旧数据长,相当于增加新内容,思路和插入数据类似;如果新数据比旧数据短,相当于减少内容,思路和删除数据类似。实际开发中,我们往往会保持新旧数据长度一致,以减少编程的工作量,所以我们不再讨论新旧数据长度不同的情况。

总起来说,本节重点讨论数据的插入和删除。 

在数据的插入删除过程中,需要多次复制文件内容,我们有必要将该功能实现为一个函数,如下所示

 

该函数可以将原文件任意位置的任意长度的内容复制到目标文件的任意位置,非常灵活。如果希望实现《C语言实现文件复制功能(包括文本文件和二进制文件)》一节中的功能,那么可以像这面这样调用

fcopy(fSource, 0, -1, fTarget, 0);

请先看代码: 

 

代码说明
1) fsize() 是在《C语言获取文件大小(长度)》自定义的函数,用来获取文件大小(以字节计)。

2) 第17行判断数据的插入位置,如果是在文件末尾,就非常简单了,直接用 fwrite() 写入即可。

3) 如果从文件开头或中间插入,就得创建临时文件。

tmpfile() 函数用来创建一个临时的二进制文件,可以读取和写入数据,相当于 fopen() 函数以"wb+"方式打开文件。该临时文件不会和当前已存在的任何文件重名,并且会在调用 fclose() 后或程序结束后自动删除。

请看下面的代码


最新文章
WordPress新手视频教程10:常用必备插件Plugin推荐和安装
通过合理使用WordPress的免费和付费插件,能够帮你的网站增加功能和提升谷歌上的SEO排名。 但是很多WordPress新手并不是很了解什么是WordPress插件,或者说不知道应该安装哪些WordPress插件。 在本章中,我们将研究如何在WordPress中安装插
用AI画美女:一键生成超高清美女写真,体验最新科技魅力!
限时免费,点击体验最近超火的AI生图神器,坐拥3000美女的大男主就是你! https://ai.sohu.com/pc/generate/textToImg?_trans_=030001_yljdaimn 在这个炫酷的科技时代,AI生成的艺术作品已然成为了社交媒体上的热话题。想象一下,宝子们,
鲁兆最新动态与观点解析,鲁兆最新动态及观点深度解析
摘要:鲁兆的最新动态显示他依然活跃在学术界和社会领域。他近期发表的观点解析,关注社会热点问题,对经济发展趋势进行深入剖析,并强调科技创新的重要性。他认为,在全球化背景下,应更加注重开放合作,推动科技进步,同时关注社会公平与
萧山烹饪学校排名(萧山烹饪学校排名优化)
:探寻最佳烹饪教育之地在美食文化日益繁荣的今天,烹饪技能的学习与提升成为众多热爱美食人士的追求。作为浙江省杭州市的重要区域,萧山区汇聚了多所知名的烹饪学校。这些学校以各自独特的优势和教学特色,在培养烹饪人才方面发挥着重要作
搜狗如何快速收录 搜狗加速收录秘籍,新媒体内容秒上搜索榜
搜狗如何快速收录文章:专业策略与实操指南在数字时代,搜索引擎优化(SEO)已成为网站获取流量、提升品牌影响力的关键手段之一搜狗搜索引擎,作为中国互联网领域的重要参与者,其收录速度和排名机制对于网站而言至关重要本文将深入探讨如
百度seo是什么意思?
百度seo是什么意思?百度seo指的是采用有效的方式提升网站在百度的搜索结果,主要的表现就是让网站出现在百度的前几页,要是可以出现在首页前几条的话,那将是最为完美的事情。因为网站有这样的排名,才能实现自身产品及网站信息的最大化曝
知乎精选:无条件下款的网贷有哪些-指数基金纳入个人养老金基金名录有何意义? 易方达基金:有助于构建“长钱长投”生态
  《通知》规定,在现有理财产品、储蓄存款、商业养老保险和公募基金产品基础上,将国债、特定养老储蓄、指数基金纳入个人养老金产品范围。金融机构要做好个人养老金产品资产配置公示等工作,依法依规开展投资咨询服务,探索开展默认投资
搜狗输入法医生版 v1.1 免费安装版
搜狗输入法医生版是一款十分不错的专门为从事医疗职业的群体而打造的智能输入法。软件内包含医疗词库、超级联想、简约风格、医生定制等特色,本站提供的是该软件的安装版本,欢迎需要的朋友前来本站下载使用。医疗词库针对医生群体专业词汇
百度蜘蛛池价格:蜘蛛池创建教程图片大全,轻松搭建高效SEO工具
百度蜘蛛池价格合理,提供详细创建教程及图片,助您轻松搭建高效SEO工具。本文目录导读:什么是蜘蛛池?蜘蛛池创建教程蜘蛛池创建教程图片大全随着互联网的快速发展,搜索引擎优化(SEO)成为了许多企业和个人获取流量、提高品牌知名度的重
河南玄同智能科技申请边缘分布场景下的状态应用的全链路监控专利,具备延迟低、数据安全性强和系统响应速度快的优点
金融界2024年12月18日消息,国家知识产权局信息显示,河南玄同智能科技有限公司申请一项名为“边缘分布场景下的状态应用的全链路监控方法和系统”的专利,公开号CN 119127614 A,申请日期为2024年9月。专利摘要显示,本发明公开了一种边缘
相关文章
推荐文章
发表评论
0评