2016-02-28 88 views
1

我正在使用下面的代码写入一个现有的文件,但内容被追加。需要TFileStream选项来清空文件并覆盖它?如何在覆盖之前使用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; 

回答

3

使用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; 
+0

我改变了'Create'模式'fmCreate',改变了寻求到'fsFromBeginning',一切似乎现在能够正常工作。是否使用'fmCreate'使查找变得多余? – vfclists

+1

@vfclists是的。 'fmCreate'会重新创建没有数据的文件,所以没有必要定位流。 –