请教下fwrite一段数据后有没有简单的方法在文件起始处额外插入一段数据?

dahaiI0 2014-01-09 10:47:36
fseek到文件起始处后再fwrite是覆盖式插入,难道必须得把文件数据读取出来,再feek,fwrite写入要插入的数据,再把原来的数据追加上?
...全文
274 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
buyong 2014-01-09
  • 打赏
  • 举报
回复
引用 楼主 dahaiI0 的回复:
fseek到文件起始处后再fwrite是覆盖式插入,难道必须得把文件数据读取出来,再feek,fwrite写入要插入的数据,再把原来的数据追加上?
yes
qq120848369 2014-01-09
  • 打赏
  • 举报
回复
文件没法覆盖。
zhuobattle 2014-01-09
  • 打赏
  • 举报
回复
不修改逻辑,看起来只能这样
lm_whales 2014-01-09
  • 打赏
  • 举报
回复
文件是分块的。 操作系统可以重新分配一块(一个簇,最少的就是一个扇区了) 文件就是这样,一个块,一个块拼凑起来的。 操作系统自身,可以一块一块处理文件,然后拼接成一个文件。 但是,并不提供这样的功能给用户使用。 用户只能,一次得到一个完整的文件, 不断写人以及(SetFilePointer) 这些功能, 可以改变文件长度,从而增加文件的块数。 不能按字节设定文件开始位置; 也不能随便,改变分配给文件的各个块,也不能调整他们的顺序。 所以,在文件前面添加数据,只能是读出来,写进去。 你可以试试,把要添加的文件写到一个文件中; 然后调用系统功能,合并两个文件,看看如果是整块的写入的, 操作系统会不会,对此加以优化。
千树之影 2014-01-09
  • 打赏
  • 举报
回复
很简单,只要你自己写个操作系统,支持这个功能就行啊
赵4老师 2014-01-09
  • 打赏
  • 举报
回复
所谓修改删除文件a某位置的内容,其实是读打开文件a,再将‘a中修改删除位置之前的内容+修改删除的内容+a中修改删除位置之后的内容’保存到文件b,关闭文件a,删除文件a,将文件b改名为与之前文件a相同的名字,仅此而已。

64,641

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧