为什么我不能这样做?
procedure TForm1.Button1Click(Sender: TObject);
var
FS: TFileStream;
begin
FS := TFileStream.Create('file', fmOpenRead + fmShareDenyWrite);
try
TMemoryStream(FS).SaveToFile('tempfile');
finally
FreeAndNil(FS);
end;
end;
我有一个带AStream: TStream
参数的方法,并用两种类型的流调用它。我不明白这个问题。
答案 0 :(得分:3)
您无法执行此操作,因为TFileStream
不是TMemoryStream
的后代。
事实上,您需要强制转换以使编译器满意的事实应该足以警告您的代码是错误的。所有演员都会告诉编译器闭嘴,你知道的更好。在这种情况下,你不会。你对编译器说谎,它会在适当的时候报复。
你真正想要的是TFile.Copy
。这明显优于使用流来手动执行文件复制。关键是TFile.Copy
通过操作系统进行,因此能够高效复制,保留文件元数据,复制备用文件流等。
嗯,至少在Windows上是这样。 Delphi支持的其他操作系统没有Win32 CopyFile
API的等价物,因此TFile.Copy
确实用流实现了这一点。但是,最好让运行时库为您包装这些详细信息。