怎样读二进制文件,(50分)

  • 主题发起人 主题发起人 nickname
  • 开始时间 开始时间
怎么进到这个分类里面了, 你是指读二进制文件还是数据库的二进制字段?
 
二进制文件
 
keyishiyong TFileStream:

Uses classes;

var
file: TFileStream;
buf: array[0..4096] of char;
begin
file.Create('test', fmOpenReadWrite);
file.Read(buf, 4096);
file.Free;

end;
 
只有知道了二进制文件的格式才能读取需要的数据
 
???不好意思, 怎么汉字没有出来?
可以使用TFileStream.例子如上面
 
太好了,谢谢,还有什么指教的,请继续
 
其他还有就是要注意所调用的方法的返回值啦,这样可以判断
文件打开是否成功,读写是否成功等等
 
你也可以使用ANSI Pascal的标准文件I/O方式, 使用无类型文件.
 
使用ANSI pascal的例子如下:(Copy file)

Uses
System;

var
F1, F2: File;
NumRead, NumWritten: Integer;
Buf: array[1..4096] of Char;
begin
AssignFile(F1, 'test1.bin');
Reset(F1, 1); // Record size set to 1
AssignFile(F2, 'test2.bin');
Rewrite(F2, 1); // d.o.

repeat
BlockRead(F1, Buf, SizeOf(Buf), NumRead);
BlockWrite(F2, Buf, NumRead, NumWritten);
until (NumRead = 0) or (NumWritten <> NumRead);

CloseFile(F2);
CloseFile(F1);

end;
 
我比较喜欢直接用函数:
var
f1, len: integer;
str : string;
begin
f1 := fileopen('testread.bin', fmOpenRead);
if f1 > 0 then
begin
len := fileseek(f1, 0, 2);
fileseek(f1, 0, 0);
str := stringofchar(#0, len);
fileread(f1, str[1], len);
fileclose(f1);
end;
f1 := createfile('testwrite.bin');
if f1 > 0 then
begin
filewrite(f1, str[1], len);
fileclose(f1);
end;
end;
 
我喜欢用TFileStream结合TReader和TWriter处理二进制文件。
TReader可以提供处理各种基本数据类型的方法,还有缓存功能和类型检测功能。
速度快,而且安全。

Stream := TFileStream.Create(FileName, fmOpenRead or fmShareExclusive);
Reader := TReader.Create(Stream, 1024);
try
... := Reader.ReadInteger;
... := Reader.ReadFloat;
......
finally
Reader.Free;
Stream.Free;
end;
 
文件操作在delphi中有数种方法(pascal支持,class支持,stream支持..).但我喜欢用fileopen,fileread...
 
多人接受答案了。
 
后退
顶部