我想删除文件中的某条记录该如何做呢?(100分)

  • 主题发起人 主题发起人 zla
  • 开始时间 开始时间
Z

zla

Unregistered / Unconfirmed
GUEST, unregistred user!
我的文件是这样定义的:
MyFile : file of byte;
现在我想删除(0--1021)的内容,请问我该如何做??
写入
var
F : file of char;
Student : TStudent;
begin
AppPath := ExtractFilePath(Application.ExeName)+'abc.dat';
AssignFile(F,appPath);
reset(F);
// Student.Name :='系统圆明园发';
Student.Name := Encrypt('系统圆明园发abc',2);
Student.sex := Encrypt('男',2);
Student.Address := Encrypt('china',2);
BlockWrite(F,student,sizeof(TStudent));
CloseFile(F);
end;
删除某条,我该如何做呢?
 
一段程序仅供参考:
.....
CurrentRec := StringGrid1.Row - 1;
if CurrentRec < 0 then Exit;
if MessageDlg('Delete Current Record ?', mtConfirmation,
[mbYes, mbNo], 0) = idYes then
begin
HazAttr.text := '';
for I := CurrentRec + 1 to Count - 1 do
begin
seek(MethodFile, i);
read(MethodFile, MethodRec);
seek(MethodFile, i - 1);
Write(MethodFile, MethodRec);
end;
Truncate(MethodFile);
Count := Count - 1;
ChangeGrid;
end;
.....
 
干脆用一个表来管理比较好,这样很容易处理
 
因为数据很小,用表的话还涉及ADO的安装,如果用户为win98,第一版,第二版又升级又补
丁的用户受不了。
 
用TFileStream很简单的
 
用TFileStream如何做呀?
 
你应该知道每一个记录的大小是一样的....

 
是呀,我的每条记录长短一样,但是我想知道如何删除一条记录。
 
找到起始位置,计算存储长度,执行串移动即可
 
有谁有例子,送我一个吧。
 
应定义成记录文件:
TStudent = record
Student.Name := Encrypt('系统圆明园发abc',2);
Student.sex := Encrypt('男',2);
Student.Address := Encrypt('china',2);
end;
type
FileType = file of TStudent;
这样删除的是一个记录。
 


 
1、全部读到内存
2、内存中执行删除(将后面的数据往前移动并缩小内存大小)
3、写回文件
 
是个办法!
 
好吧。我试试。
 
我现在采用的是删作某条记录,后面的记录向前移,但是移完以后,最后一条记录如何去
掉呢?是不是强行在结尾写文本结束符??文件结束符是什么?如何写呀?
 
我现在采用的是删作某条记录,后面的记录向前移,但是移完以后,最后一条记录如何去
掉呢?是不是强行在结尾写文本结束符??文件结束符是什么?如何写呀?
 
重新保存文件。
 
to Pearl.
我的是这个文件是这样声明的
MyFile : textFile;
我该如何用SetEndOfFile在某处结束MyFile.
 
后退
顶部