易码技术论坛

 找回密码
 加入易码
搜索
查看: 169993|回复: 11

如何删除文件中的一段数据,不要把所有数据写入RAM

[复制链接]
发表于 2005-8-20 13:12:00 | 显示全部楼层
你只用读取需要的数据,例如要删除中间,就读取一头一尾的数据,然后再以"w"模式打开文件,把数据写进去。
 楼主| 发表于 2005-8-20 17:14:00 | 显示全部楼层
这样太慢
我的目的是每次要从文件尾固定删除一定字节的数据
有没有快捷方法
发表于 2005-8-20 17:33:00 | 显示全部楼层
要是这样的话,最快的速度是直接修改文件列表中文件的长度就可以,不过貌似Lava可能不能实现。
Lava里面也没有其他的快速方法。
既然最后的是要删除的,那读取的时候直接忽略它们不也可以么?
 楼主| 发表于 2005-8-20 18:02:00 | 显示全部楼层
如果从开始读,必定太慢,所以我设计要从结尾逆向读,但这样就没法忽略呀
发表于 2005-8-20 18:14:00 | 显示全部楼层
逆向读有些麻烦,需要每次都计算出数据的位置然后fseek过去,再读取,再计算下一个的位置,再fseek……这样下去效率也不会很高,为什么保存的时候不从结尾保存。
 楼主| 发表于 2005-8-20 18:18:00 | 显示全部楼层
逆向读可以这样做
fseek(fp;0;SEEK_END);
fseek(fp;-100;SEEK_CUR);  //假定每次读100字节
fread(pt,1,100,fp);
........   //就差如何删除最后的100字节了
这样应该会很快
发表于 2005-8-20 18:22:00 | 显示全部楼层
那在第一次读取之前先
fseek(fp;0;SEEK_END);
fseek(fp;-100;SEEK_CUR);
忽略掉最后100个
然后每次在
fseek(fp;-100;SEEK_CUR);
fread(pt,1,100,fp);
 楼主| 发表于 2005-8-20 18:38:00 | 显示全部楼层
有很多文件要读
所以每次读完就删掉一部分,否则各个文件都要定位,我怕文曲星承受不了
发表于 2005-8-20 18:48:00 | 显示全部楼层
不明白了,楼主最好说说你想实现怎样的效果
 楼主| 发表于 2005-8-20 18:54:00 | 显示全部楼层
file1.dat
file2.dat
...
files10.dat
有这样10个文件
每个文件16KB
我要从file1.dat结尾读1KB,file2.dat结尾读1KB...依此类推
(然后10个文件结尾的1KB没用了,先不删除)
我要再从10个文件的倒数2KB起读1KB
...
依此类推
但结果是越来越慢
所以我想每次读完删除结尾的1KB,这样能快不少
发表于 2005-8-20 20:25:00 | 显示全部楼层
建议你干脆在PC上用UE或者WINHEX把你的数据整理成易于读取的格式……。
WQX本来文件函数就有些烂,你在这样有些“疯狂”的读取,估计不好弄。
 楼主| 发表于 2005-8-20 12:13:44 | 显示全部楼层 |阅读模式
如题

您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2025-6-17 06:16 , Processed in 0.018019 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表