关于int64问题 ( 积分: 100 )

  • 主题发起人 主题发起人 jxgxy
  • 开始时间 开始时间
J

jxgxy

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.btnReadClick(Sender: TObject);
var
MyStream:TFileStream;
i:Int64;
begin
MyStream := TFileStream.Create('c:/a.dat',fmOpenWrite);
MyStream.Read(i,8);
edt1.Text := IntToStr(i);
MyStream.Free;
end;

procedure TForm1.btnWriteClick(Sender: TObject);
var
MyStream:TFileStream;
i:Int64;
begin
MyStream := TFileStream.Create('c:/a.dat',fmCreate);
i := 15000000000;
MyStream.Write(i,8);
MyStream.Free;
end;

我将15000000000写入文件后,再读出来,怎么不是15000000000,而是19316542400558849

有办法写入150亿,读出来也是150亿不?

谢谢.
 
procedure TForm1.btnReadClick(Sender: TObject);
var
MyStream:TFileStream;
i:Int64;
begin
MyStream := TFileStream.Create('c:/a.dat',[red]fmOpenReadWrite[/red]);
MyStream.Read(i,8);
Edit1.Text := IntToStr(i);
MyStream.Free;
end;
 
确实是个问题,我去试了。怎么都不行。Int64改为integer,也不行,
 
楼主的原句:
MyStream := TFileStream.Create('c:/a.dat',[red]fmOpenWrite[/red]);
红色部分错了,改成fmOpenRead才行,否则你下面的MyStream.Read(i,8)会根本不读任何数据的,这样作为局部变量的i,因为不会被编译器初始化,而可能存在任何值,而且这个任何值绝对没有可能是你期望的150e。。。所以,出错了!

赶快去谢谢群里面的“地质灾害”兄,他眼尖,一眼就看出问题了。
 
谢谢灾害同志.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
546
import
I
后退
顶部