我也碰到过这个问题,看了许多帖子和书本,都没有找到满意的答案。
最后自己摸索出了一个可行但并不高效的方法。
主要时利用truncate(f)函数,其作用是把文件从当前指针的位置处切断,即指针后面的内容都从文件中删除。
所以我的思想是:从删除位置起的每一行(对于记录文件则是每条记录)顺次前移一个位置(指定删除的行已经被后面的行所覆盖了)。最后把文件最后的一行(或记录)用truncate(f)截断即可!
以记录文件为例,设文件共有n条记录,欲删除第j条记录(0<=j<=n-1)(从第0条记起),tmprecord为文件记录的记录类型
主要程序如下:
for i:=j to n-2 do
begin
seek(f,i+1); //读出下一条记录
Read(f,tmprecord);
seek(f,i); //写入到上一条记录的位置
write(f,tmprecord);
end;
seek(f,n-1);
truncate(f); //把文件从当前指针的位置处切断,指针后面的全部内容都从文件中删除了。
n:=n-1; //记录数减1此办法虽然可行,但是效率不高,因为需要一条一条移动记录,如果文件很长,而需要删除的又是第一条记录的话,那用此方法就不适合了!但是我至今未找到更好的方法,如果谁有更好的方法,可一定要拿出来大家分享阿!
最后自己摸索出了一个可行但并不高效的方法。
主要时利用truncate(f)函数,其作用是把文件从当前指针的位置处切断,即指针后面的内容都从文件中删除。
所以我的思想是:从删除位置起的每一行(对于记录文件则是每条记录)顺次前移一个位置(指定删除的行已经被后面的行所覆盖了)。最后把文件最后的一行(或记录)用truncate(f)截断即可!
以记录文件为例,设文件共有n条记录,欲删除第j条记录(0<=j<=n-1)(从第0条记起),tmprecord为文件记录的记录类型
主要程序如下:
for i:=j to n-2 do
begin
seek(f,i+1); //读出下一条记录
Read(f,tmprecord);
seek(f,i); //写入到上一条记录的位置
write(f,tmprecord);
end;
seek(f,n-1);
truncate(f); //把文件从当前指针的位置处切断,指针后面的全部内容都从文件中删除了。
n:=n-1; //记录数减1此办法虽然可行,但是效率不高,因为需要一条一条移动记录,如果文件很长,而需要删除的又是第一条记录的话,那用此方法就不适合了!但是我至今未找到更好的方法,如果谁有更好的方法,可一定要拿出来大家分享阿!
解决方案 »
- 发现Delphi 2006的Open Tools API的bug比较严重阿
- 如何把剪贴板里的BMP图片转换成JPG图片并压缩
- 安装fastrepost时 出现一些错误!请帮助解决
- 搜了好久都找不到答案,关于得到文件复制进度问题。请各位帮帮小弟,先谢过!~~~~~~~~~
- 有那一个控件同时可以调用多种播放格式文件的也就是说他的play可以自动调用mov,rm,flash的切换播放
- 如何在报表预览时,指定报表所连接的数据源的记录位置,如:在预览报表时,希望报表显示第二条记录;
- 分布的问题,急救!急救!
- 请问tclientdataset问题!!!
- 因女朋友在东莞虎门,想在虎门找份工作,不知有谁能帮忙?请看简历。
- Delphi中一个异常处理的问题
- 关于popupmenu的简单问题,但我就是解决不了,大家都进来看看吧。解决者必定给分!
- 模态窗口问题
LoadFromFile('MyText.txt');
...//对字符串进行处理
SaveToFile('MyText.txt');
finally
Free;
end;