2016-02-28 89 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'會重新創建沒有數據的文件,所以沒有必要定位流。 –