【发布时间】:2014-01-06 15:30:51
【问题描述】:
尽管在Text File Writing performances in Delphi(Ken White 的回答下的 cmets)中说了些什么,我看到 TStreamWriter not 使用以下代码刷新:
procedure TFrmAddEvents.LogEvent(AEvent: TcxSchedulerEvent);
begin
if not Assigned(FStreamWriter) then
begin
FStreamWriter := TStreamWriter.Create(TFileStream.Create(ChangeFileExt(ParamStr(0),'.log'),fmCreate or fmOpenRead));
FStreamWriter.AutoFlush := true;
end;
FStreamWriter.WriteLine(TcxEventDescription(AEvent));
// Even this has no effect:
FStreamWriter.Flush;
end;
即使在执行之后
if Assigned(FStreamWriter) then FStreamWriter.Free;
在 FormClose 中,文件仍然是 0 字节。
程序执行完毕后,文件大小为 600+ kB。
- FStreamWriter 是 TStreamWriter 类型的表单属性。
- 使用
fmCreate or fmOpenWrite创建没有区别。 - TcxEventDescription 确实给出了一个有效的返回字符串 > 500 字节,其中包含 CRLF。
- 如您所见,我没有对编码做任何事情,所有默认的 Unicode 东西。
- 我从 Delphi XE2 IDE 运行或作为独立的可执行文件运行。
- Win7 64位下的32位应用
会发生什么以及如何解决?
[2014 年 1 月 7 日编辑]
Uwe 回答后更新代码;还是不行:
procedure TFrmAddEvents.LogEvent(AEvent: TcxSchedulerEvent);
var lName: string;
begin
lName := ChangeFileExt(ParamStr(0),'.log');
if not Assigned(FStreamWriter) then
begin
FStreamWriter := TStreamWriter.Create(lName); // Or TStreamWriter.Create(lName,true);
FStreamWriter.AutoFlush := true;
end;
FStreamWriter.WriteLine(TcxEventDescription(AEvent));
// Next does not help either:
FStreamWriter.Flush;
end;
在我调用 FStreamWriter.Free 之前,文件仍然为 0 字节。
【问题讨论】:
-
注意 StreamReader/StreamWrite 也支持 OwnStream 来拥有 Stream,否则默认情况下,当流传递给他们的构造函数时,他们不会拥有它
标签: delphi delphi-xe2