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;