【问题标题】:TFileStream and TMemoryStream typingTFileStream 和 TMemoryStream 类型
【发布时间】:2016-02-29 10:18:02
【问题描述】:

为什么我不能这样做?

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 参数的方法,并使用两种类型的流调用它。我不明白这个问题。

【问题讨论】:

    标签: delphi delphi-xe2


    【解决方案1】:

    您不能这样做,因为TFileStream 不是TMemoryStream 的后代。

    确实,您需要强制转换以使编译器满意这一事实应该足以警告您的代码是错误的。你的演员所做的就是告诉编译器闭嘴,你知道得更好。在这种情况下,你没有。你在对编译器撒谎,它会在适当的时候进行报复。

    你真正要找的是TFile.Copy。这比使用流手动执行文件复制要好得多。关键是TFile.Copy 通过操作系统,因此能够有效地复制、保留文件元数据、复制备用文件流等等。

    嗯,至少在 Windows 上是这样。 Delphi 支持的其他操作系统没有与 Win32 CopyFile API 等效的 API,因此 TFile.Copy 确实使用流实现了这一点。不过,最好还是让运行时库为您包装这些细节。

    【讨论】:

    • 我现在明白了。我有非常困难的方法结构,现在我必须清除它。谢谢。
    猜你喜欢
    • 2018-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-21
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    相关资源
    最近更新 更多