一个棘手的问题,关于TStream对象(50分)

  • 主题发起人 主题发起人 3868474
  • 开始时间 开始时间
3

3868474

Unregistered / Unconfirmed
GUEST, unregistred user!
我在使用TStream对象调用read方法时,出现了一个Abstract错误,
有谁能帮忙解释一下吗?并介绍一下TStream的用法。
 
把你的代码贴上来看看
 
代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
iFileHandle: Integer;
iFileLength: Integer;
iBytesRead: Integer;
Buffer: PChar;
i: Integer;
s : TStream;
begin
try
iFileHandle := FileOpen('e:/a.dat', fmOpenRead);
iFileLength := FileSeek(iFileHandle,0,2);
FileSeek(iFileHandle,0,0);
Buffer := PChar(AllocMem(iFileLength + 1));
iBytesRead := FileRead(iFileHandle, Buffer, iFileLength);
FileClose(iFileHandle);

s := TStream.Create ;

S.Read(Buffer,iBytesRead);

finally
FreeMem(Buffer);
end;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
iFileHandle: Integer;
iFileLength: Integer;
iBytesRead: Integer;
Buffer: PChar;
i: Integer;
s : TStream;
begin
try
iFileHandle := FileOpen('C:/autoexec.bat', fmOpenRead);
iFileLength := FileSeek(iFileHandle,0,2);
FileSeek(iFileHandle,0,0);
Buffer := AllocMem(iFileLength + 1);
////////////////////////////////////////////////////////////////////////////////
// iBytesRead := FileRead(iFileHandle, Buffer^, iFileLength);
// 请注意第二个参数.
iBytesRead := FileRead(iFileHandle, Buffer^, iFileLength);
////////////////////////////////////////////////////////////////////////////////
FileClose(iFileHandle);

// s := TStream.Create;
//请注意:TStream是一个抽象类,它的很多方法都没有实现,必须通过它的继承类来创建.
s:=TMemoryStream.Create;

// S.Read(Buffer,iBytesRead);
//这里不知道你要做什么?如果说你要从s中读出数据的话,可以s是见创建的对象,没有任何内容的.
//所以我暂估计你需要写入,可是写入是用Write方法而不是Read方法;
s.Write(Buffer^,iBytesRead);
//请注意Write方法的第一个参数,Read方法的第一个参数也应该是这样.
TMemoryStream(s).SaveToFile('C:/a.bat');
//把写入的数据保存到一个文件中,请注意s是TStream,它是没有SaveToFile方法的,所以这里强制类型转换成TMemoryStream.
s.Free;
//请注意释放s

finally
FreeMem(Buffer);
end;
end;
 
建议你在定义变量s的时候直接声明成TMemoryStream,这样后面就不用类型转换了.
 
非常感谢你的完美答案,最后请教一个问题,为什么是而Buffer^,而不是Buffer?
能留下你的联系方式吗,以便于更多的请教。
 
接受答案了.
 
我的Email是aizb@163.net,主页是www.aidelphi.com
 
后退
顶部