我有一个日志组件,它使用 TByteStream 来存储日志内容,并使用 TFileStream 定期将它们写入磁盘。我需要确保在写入文件流后立即更新文件。到目前为止,我只知道 FlushFileBuffers(),这是一个 Windows 特定的函数。在其他 XE8 平台支持的平台上怎么做?
问问题
434 次
1 回答
2
RTL 没有在不关闭文件的情况下刷新文件的功能。您必须改用特定于平台的功能。在 Windows 上,TFileStream
使用 Win32CreateFile()
函数打开/创建文件,因此您可以使用FlushFileBuffers()
它来刷新它。在其他平台上,TFileStream
使用 POSIXopen()
函数打开/创建文件,因此您可以使用 POSIXfsync()
函数刷新它。
尝试这个:
uses
...
{$IFDEF MSWINDOWS}
, Winapi.Windows
{$ELSE}
, Posix.Unistd
{$ENDIF}
;
...
{$IFDEF MSWINDOWS}
FlushFileBuffers(MyFileStream.Handle);
{$ELSE}
fsync(Integer(MyFileStream.Handle));
{$ENDIF}
于 2015-06-05T18:56:22.810 回答