【问题标题】:How can I use TFileStream to truncate the existing file before overwriting it?如何在覆盖之前使用 TFileStream 截断现有文件?
【发布时间】:2016-02-29 01:40:01
【问题描述】:

我正在使用下面的代码写入现有文件,但内容被附加。清空文件并覆盖它需要哪些 TFileStream 选项?

procedure TUtilitiesForm.btnSaveClick(Sender: TObject);
var fs: TFileStream;
begin
  fs := TFileStream.Create(FileNameEdit1.Text, fmOpenWrite);
  fs.Seek(0,fsFromEnd);
  mmoDDL.Lines.SaveToStream(fs);
  fs.Free;
end;

【问题讨论】:

    标签: lazarus freepascal delphi


    【解决方案1】:

    使用fsFromEnd 可以将数据附加到现有文件的末尾之外,另一方面fsFromBeginning 从开头开始但不会截断文件。

    fmOpenWrite 更改为fmCreate

    procedure TUtilitiesForm.btnSaveClick(Sender: TObject);
    var fs: TFileStream;
    begin
      fs := TFileStream.Create(FileNameEdit1.Text, fmCreate);
      try
        mmoDDL.Lines.SaveToStream(fs);
      finally
        FreeAndNil(fs);
      end;
    end;
    

    【讨论】:

    • 我将Create 模式更改为fmCreate 并将Seek 更改为fsFromBeginning,现在一切似乎都正常了。使用fmCreate 会使搜索变得多余吗?
    • @vfclists 是的。 fmCreate 将重新创建没有数据的文件,因此没有必要定位流。
    猜你喜欢
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 2014-11-17
    • 2016-04-22
    • 2015-01-20
    • 2015-01-03
    • 2011-05-02
    • 1970-01-01
    相关资源
    最近更新 更多