鸭子上架, 新手上路,文件操作(二进制)问题:如何在一个文件的指定位置写入数据?(20分)

  • 主题发起人 主题发起人 fjhst
  • 开始时间 开始时间
F

fjhst

Unregistered / Unconfirmed
GUEST, unregistred user!
鸭子上架, 新手上路,文件操作(二进制)问题:如何在一个文件的指定位置写入数据?
谢谢!
 
简单讲:就是在一个文件开始处插入一堆数据, 由于文件很大(10Mb<文件大小<200Mb), 我不想把它拷贝到内存中操作。。。
所以, 有没有简单的方法实现哪?谢谢!
 
用TStringList? 行不行?我的文件很大。。。
 
用fseek,write等就可以实现的啊。
如果文件很大,可以用一个临时文件,先把插入点前的内容读出来写到临时文件,
接着在临时文件写入数据,再把原文件的后部分写进来
 
可以用流来操作文件呀!TFileStream类型!在大富翁里搜一下就可以知道如何去做!
 
天都亮了!我得去睡觉了!
 
我要去看日出了!好多年没看到了!
 
是啊!看到日出, 感觉真好!童年的感觉。。。
 
打开旧文件f1,创建一个新文件f2,
从f1拷贝n字节到f2,
将新内容写入f2
拷贝剩下的内容到f2.
关闭f1,f2
copy f2-->f1
 
有没有人一起看夕阳
 
var
stream1, stream2: TFileStream;//stream1: 目标文件;stream2:源文件
len, DPTJInfoLen: Integer;
str: array[0..1024] of char;
DPTJInfo: array[0..128] of char;
buffer: Pointer;
begin
DPTJInfoLen := $80;
DPTJInfo := 'Here is DPTJ Corporation DataBase Header.WARING: Do not Edit it, otherwise your data will be destoried!!! ';
stream1 := TFileStream.Create('d:/dptj.dat', fmCreate);
stream2 := TFileStream.Create('C:/dbf-data/sh020410.dbf', fmOpenRead);
GetMem(buffer, stream2.Size+DPTJInfoLen);
stream1.Seek(0,soFromBeginning); //定位到文件l头
stream2.Seek(0,soFromBeginning); //定位到文件头
stream1.Write(DPTJInfo, DPTJInfoLen);
stream1.Seek(DPTJInfoLen,soFromBeginning); //定位到文件头
stream1.CopyFrom(stream2, stream2.Size);

str:= ''; // This is additional line
stream1.free;
stream2.free;
FreeMem(buffer, stream2.Size+DPTJInfoLen);

end;
 
由于stream2很大, 这样是不是很慢?
stream1.CopyFrom(stream2, stream2.Size);
 
to 盗梦人:如果你是MM的话, 我很乐意的, 嘻嘻!
 
可以的,不过copyfrom时第二个参数可以置0,没必要用stream2.size
 
好!谢谢各位!结贴!散分!我也要扬名大富翁!

远帆!以后我们再联系哦!
 
后退
顶部