关于文件的写入问题,在线恭候,急用!!! ( 积分: 50 )

  • 主题发起人 主题发起人 lb3141
  • 开始时间 开始时间
L

lb3141

Unregistered / Unconfirmed
GUEST, unregistred user!
我想把一个图片存入文件中,当然,文件中存的还有其它数据。但不知为什么总报地址错误,请哪位大虾帮忙以下,感激不禁!

procedure TForm1.Button1Click(Sender: TObject);
var
FileHandle : Integer;
S: TMemoryStream;
ASize: Integer;
P: PChar;
begin
 //测试文件
FileHandle := FileOpen('b.txt', fmOpenWrite);
if not FileHandle > 0 then
Exit;
 
 //这里是测试,所以只存了图片
S :=TMemoryStream.Create;
Image1.Picture.Graphic.SaveToStream(S);
S.Position :=0;
ASize :=S.Size;

P :=PChar(AllocMem(ASize+1));

S.ReadBuffer(p,ASize);
FileWrite(FileHandle,p,ASize);
FileClose(FileHandle);

FreeMem(P);
S.Clear;
S.Free;
end;

//过程运行没错,但不知什么地方报地址错!
 
我想把一个图片存入文件中,当然,文件中存的还有其它数据。但不知为什么总报地址错误,请哪位大虾帮忙以下,感激不禁!

procedure TForm1.Button1Click(Sender: TObject);
var
FileHandle : Integer;
S: TMemoryStream;
ASize: Integer;
P: PChar;
begin
 //测试文件
FileHandle := FileOpen('b.txt', fmOpenWrite);
if not FileHandle > 0 then
Exit;
 
 //这里是测试,所以只存了图片
S :=TMemoryStream.Create;
Image1.Picture.Graphic.SaveToStream(S);
S.Position :=0;
ASize :=S.Size;

P :=PChar(AllocMem(ASize+1));

S.ReadBuffer(p,ASize);
FileWrite(FileHandle,p,ASize);
FileClose(FileHandle);

FreeMem(P);
S.Clear;
S.Free;
end;

//过程运行没错,但不知什么地方报地址错!
 
文件中写入的数据是对的,就是报地址错!
 
把PChar换成BYTE数据试试
 
var s:char;
p:=@s;
......
S.ReadBuffer(s,asize);
时式
 
建议楼主使用TFileStream
这是专门的文件流操作对象
 
谁人大家说的我早就试过,但现在问题已经解决,虽然麻烦点,还是谢谢
 
为什么还要分配内存呢? Image1.Picture.Graphic.SaveToStream(S);已经写入内存了,
FileWrite(FileHandle,Pointer(S),ASize);就可以写入文件了
 
wwr74: 写是没问题,但怎么读呀
 

Similar threads

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