作者dozer (rezod)
看板LinuxDev
标题[转录]Re: [问题] fseek and fopen
时间Wed Nov 29 21:44:17 2006
※ [本文转录自 C_and_CPP 看板]
作者: LPH66 (凉宫春日症候群) 看板: C_and_CPP
标题: Re: [问题] fseek and fopen
时间: Tue Nov 7 21:42:50 2006
打个比方吧
一个档案就像是一个已经有资料的阵列
而档案指标就像是一个指向阵列中某处的指标 我们可以用fseek来改变它
而写出资料进档案就相当於我们把资料放进那个阵列(指标所指的地方)里
而如果就像你用的 指标调好後直接写入
那就会把旧的东西盖掉
(想成是阵列的话就不意外了吧?
array[100]=5; 就会把[100]这位置的东西盖掉)
那这要如何解决呢?
从阵列来看 我们有两种方法
(1) 把後面的资料全部乾坤大挪移 往後移出空间来
对回档案处理上就是要从最後一个byte起往後搬
开档→for(最後一个byte到插入点) {读入那个byte; 写入n个byte之後的位置;}
→移到插入点→写入新资料→关档
不过这要预先知道要插入的资料有多长 (算)是一个缺点
(2) 开新的阵列, 把插入点之前的资料copy过去
把要插入的资料加进去
再把插入点之後的资料copy过去
对回档案处理就是
开新档案→copy过去插入点前资料→写入新资料→copy余下资料→关档
(→删旧档→新档名改回旧档名)
这个就不用预先知道要插入的资料有多长了
--
実琴:「
河野!你真的就这样被
物质慾望给吸引过去了吗?!」
亨:「只要
穿着女装摆出亲切的样子,所有必要花费就能
全免,似乎一点都不坏啊。」
実琴:「难道你没有
男人的尊严了吗?!」
亨:(断然道)「
没有。在
节衣缩食且
生活吃紧的
学生面前,
没有那种东西。」
--プリンセス・プリンセス 第二话
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 192.192.197.115
※ 编辑: LPH66 来自: 192.192.197.115 (11/07 21:43)
1F:推 bestard:谢谢指教, 我有想到第二种作法, 只是嫌麻烦, 想说也许可以 11/07 23:28
2F:→ bestard:直接针对同一个档案作插入的动作而不用再写出新档 11/07 23:28
3F:→ bestard:不过看起来, 如果插入点後面资料还很多时, 要全部往後搬 11/07 23:29
4F:→ bestard:真的挺麻烦的, 所以我还是用第二种方式好了, 谢谢..^^ 11/07 23:30
--
It is a hard matter, my fellow citizens, to argue with the belly,
since it has no ears.
-- Marcus Porcius Cato
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.109.176.56
5F:→ dozer:从C_and_CPP转来的 11/29 21:44
6F:推 sivle:推 11/30 00:22
7F:推 qrtt1:和你原先的想法不是一样吗 @@ 11/30 06:38
8F:推 dozer:结论就是没有更好的方法XD 12/05 19:35