我也碰到过这个问题,看了许多帖子和书本,都没有找到满意的答案。
最后自己摸索出了一个可行但并不高效的方法。
主要时利用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此办法虽然可行,但是效率不高,因为需要一条一条移动记录,如果文件很长,而需要删除的又是第一条记录的话,那用此方法就不适合了!但是我至今未找到更好的方法,如果谁有更好的方法,可一定要拿出来大家分享阿!