gpt4 book ai didi

delphi - 等待文件编辑结束

转载 作者:行者123 更新时间:2023-12-03 15:49:02 32 4
gpt4 key购买 nike

我有下一个任务。需要等待 Microsoft Office 文件编辑结束。我使用下一个常规方法:文件正在编辑而文件正忙:

function FileIsBusy(AFileName: string): Boolean;
var
F: Integer;
begin
F := FileOpen(AFileName, fmShareExclusive);
Result := F = -1;
FileClose(F);
end;

function WaitFile(AFileName: string; ASpeepDelay: integer): Boolean;
begin
while FileIsBusy(AFileName) do
Sleep(ASpeepDelay);
Result := True;
end;

这种方法非常适合通过 Microsoft Word 编辑文件,而不是在 Open Office 中。 OpenOffice 使用一个进程来打开多个文件,就像 MS Office 一样。但 OpenOffice Writer 存在一些问题:在 OpenOffice Writer 第一次保存文件后,函数 FileIsBusy 返回 false。有什么建议吗?

==============================

我找到下一个解决方案:

  repeat
WaitFile(FFileInfo.lpFile, 333);
Sleep(1000);
until not FileIsBusy(FFileInfo.lpFile);

保存后,ОО释放文件一段时间并独享

最佳答案

我不同意您的方法是传统方法

轮询不应该是惯例,它应该是最后的手段

不同的办公套件将使用不同的写入文件的方式。
有些会写入一个新文件,并在完成后重命名该文件。
有些会重命名旧文件,然后写入文件。
有些可能会执行锁定。

您应该了解您的办公套件将如何写入这些文件。

为此,您需要监视正在发生的事情。
Windows 有 ReadDirectoryChangesW为此,OSnews 发布了一篇不错的 A Directory Monitor Class For Delphi围绕这一点。还有一个不错的MSDN FWatch example这解释了如何使用 ReadDirectoryChangesW

顺便说一句,当您了解哪个办公套件如何写入文件时,您也可以使用 ReadDirectoryChangesW 代码来监视这些文件写入。

--杰罗恩

关于delphi - 等待文件编辑结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4406997/

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