gpt4 book ai didi

delphi - 在非Windows平台上刷新文件缓冲区

转载 作者:行者123 更新时间:2023-12-03 19:51:55 25 4
gpt4 key购买 nike

我有一个日志记录组件,该组件使用TByteStream存储日志内容,并使用TFileStream定期将其写入磁盘。我需要确保在写入文件流后立即更新文件。到目前为止,我只知道FlushFileBuffers(),这是Windows专用的函数。如何在XE8平台支持的其他平台上执行此操作?

最佳答案

RTL没有刷新文件而不关闭文件的功能。您必须使用特定于平台的功能。在Windows上,TFileStream使用Win32 CreateFile()函数打开/创建文件,因此可以使用FlushFileBuffers()刷新它。在其他平台上,TFileStream使用POSIX open()函数打开/创建文件,因此您可以使用POSIX fsync()函数刷新文件。

试试这个:

uses
...
{$IFDEF MSWINDOWS}
, Winapi.Windows
{$ELSE}
, Posix.Unistd
{$ENDIF}
;

...

{$IFDEF MSWINDOWS}
FlushFileBuffers(MyFileStream.Handle);
{$ELSE}
fsync(Integer(MyFileStream.Handle));
{$ENDIF}

关于delphi - 在非Windows平台上刷新文件缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30664177/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com