哪位兄台能给个读取二进制文件的源文件。(200分)

  • 主题发起人 主题发起人 质数
  • 开始时间 开始时间

质数

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在需要把后缀名为*.bin 的文件以二进制形式读入(需要显示在Memo 框中)
然后在文件的最后面添加一个数字后保存成 bin 文件。
哪位兄台能给出源码啊?我的邮箱是 :lishfeng@tcl.com
谢谢啦!!!
 
不懂你要做什么。。。
 
这是读取.bin并显示在Tmemo框的代码:
其中,OpenDialog1.Options := [ofHideReadOnly,ofPathMustExist,ofFileMustExist,ofEnableSizing];
OpenDialog1.Filter := '*.bin|*.bin';
OpenDialog1.DefaultExt := '*.bin';

procedure TForm1.Button1Click(Sender: TObject);
var
f : file of byte;
fs,i : Integer;
bytes : array of byte;
tempstr : string;
begin
if OpenDialog1.Execute then
begin
tempstr := '';
assignfile(f,OpenDialog1.FileName);
reset(f);
fs:=filesize(f);//返回的字节数正确
SetLength(bytes,fs);
i := 0;
repeat
seek(f,i);
read(f,bytes);
tempstr := tempstr + ' ' + IntToHex(Bytes,2);
Inc(i);
until i >= fs;
tempstr := Copy(tempstr,2,Length(tempstr));
Memo1.Text := tempstr;
CloseFile(f);
end;
end;
此代码在读取较大的.bin文件时费时颇长,似陷入死机;对于用小.bin文件比较有效。
 
这是把Tmemo框内显示的二进制文件写入指定文件名的.bin文件里的代码:
其中SaveDialog1.Options := [ofOverwritePrompt,ofHideReadOnly,ofPathMustExist,ofEnableSizing];
SaveDialog1.Filter := '*.bin|*.bin';
SaveDialog1.DefaultExt := '*.bin';

procedure TForm1.Button2Click(Sender: TObject);
var
f : TFileStream;
data : string;
Buf: PChar;
begin
data := Memo1.Text;
data := StringReplace(data,' ','',[rfReplaceAll]);//去除空格
if SaveDialog1.Execute then
begin
GetMem(Buf,Length(data) div 2);
HexToBin(@data[1],Buf,Length(data) div 2); //十六进制字符串转换成二进制
f := TFileStream.Create(SaveDialog1.FileName, fmCreate);
try
f.Seek(0, soFromBeginning);
f.Write(Buf^, Length(data) div 2);
finally
f.Free;
end;
FreeMem(Buf);
end;
end;

再通过读写.bin文件,把保存起来的.bin重新显示到TMemo框中去,发现显示结果与原文件一模一样;如果需要修改待保存文件,则可以在TMemo框中修改再行保存,重新显示的结果也是正确的。
不知道以上能否达到你要的效果?
 
兄台你太强了。。小弟佩服佩服!!!
 
呵呵~~~~翻阅了大量的大富翁离线包数据,都是抄来的。其中后一个方法是pihome大侠的。。。在这里我们应该总结一下学习方法,善于查找解决问题的办法。也算是相互学习吧。
 
嗯,谢谢你!谢谢你的建议!
 
后退
顶部