请问:如何往已存在的文本文件中插入(insert)内容?(50分)

  • 主题发起人 主题发起人 njgyn
  • 开始时间 开始时间
N

njgyn

Unregistered / Unconfirmed
GUEST, unregistred user!
如何以读写方式打开一个已存在的文件,以便往其中插入内容,
而非rewrite----不能破坏原有的内容。
 
beign
with TStringList.Createdo
try
LoadFromFile('C:/模范情书.txt');
Insert(0,'插入第1行');
Add('添加最后1行');
SaveToFile('C:/模范情书.txt');
finally
Free;
end;
end;
 
呵呵,有办法直接对文件操作吗?
 
对文件操作好象只能用Append()
你可以仿照TIniFile的方式写一些东西呀。
我以前就这么干过。
 
用文件句柄也可以实现直接文件操作, 事实上任何方法-包括16位下直接调用
int13--都必须使用内存作为缓冲区, 只是缓冲区大小不同而已, 完全可以设置
1字节大小的缓冲区, 感觉上就好象直接在磁盘文件上进行操作了(速度恶慢).
用文件句柄进行操作的方法(不重写整个文件):
1. fileopen打开一个文件获得文件句柄.
2. fileseek(handle, 0, 2)--移动文件当前位置到文件尾(返回值为文件实际大小).
3. 计算出你要插入位置与文件尾之间的字节数
4. fileseek(handle, n, 1) -- n=你要插入数据的大小
5. fileread ... filewrite循环 将插入位置开始腾空n 字节(将插入位置之后的内容
移动到后面)
6. fileseek(handle, x, 0) -- x=你要插入数据的位置
7. filewrite写入你要插入的数据.
8. fileclose
 
何苦!你不嫌烦吗?
作为程序员,应该本能地寻找简单、高效的实现方法
你可以:
1、打开文件,
2、读入到1个字符串中
Str:=StringList.Text;
3、对字符串操作
4、保存到文件
StringList.Text:=Str;
StringList.SaveToFile('C:/还是模范情书.txt')
Delphi的字符串支持2G容量
主要的字符串操作函数:
Delete:删除子串
Insert:增加子串
Length:取字符串长度
Pos:子串定位
Concat或+:合并
采用动态数组存储、修改时复制等技术
速度绝对快!
 
njgyn:
如果不是纯文本,可以用TList或TCollection之类的东西管理你的数据
流程一样:
1、全部读入
2、修改
3、全部写回
不要考虑直接读写文件,
如果要插入(不是在文件尾追加)新内容而不覆盖旧内容,
就算能实现,也很麻烦,
每次插入一段数据就把后面的数据搬一次?
每次删除一段数据就把后面的数据搬回来?
累不累啊?
考虑问题还是逻辑清楚点好吧?
 
呵呵,
是呀,
对文本文件w.h.的方法是太繁了点(要1B1B地处理? 还是可以用blockread之类的;)
不过如果不是文本文件
也只有w.h.写的这么处理了。
 
把数据全部读入,修改完再全部写回不是更好?
在内存中管理自己的数据可以用TList之类,
看具体需要了
 
要看具体文件而定,如果是文本文件,当然应用Tstringlist。
如果是二进制文件,那我看还是一条一条地插比较好
 
或者读取原文件,写到另一个临时文件,完成后改名。
有时候源文件虽然是文本的,但是几十兆的东西,全
读到内存中还是有点费劲。我是用Readln一行行读,
一行行处理的。
 
蚯蚓的方法解决问题了,因为我现在只需要对纯文本操作;
w.h的方法是个完全解决方案,不过目前非我所需;
分数不多,不好意思,谢谢。
 
后退
顶部