等到文件编辑结束

时间:2010-12-10 08:37:32

标签: delphi openoffice.org shellexecuteex

我有下一个任务。有必要等待结束编辑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有一些问题:函数FileIsBusy在OpenOffice Writer 第一次保存文件之后返回false。有什么建议吗?

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

我找到了下一个解决方案:

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

保存后,ОО发布文件一段时间并再次独家分享

1 个答案:

答案 0 :(得分:6)

我不同意您的方法是conventional approach

轮询不应该是convention,而应该是last resort

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

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

为此,您需要监控正在发生的事情 Windows具有ReadDirectoryChangesW功能,而OSnews发布了一个很好的A Directory Monitor Class For Delphi,它包含了它。还有一个很好的MSDN FWatch example解释了如何使用ReadDirectoryChangesW

当您了解哪个办公套件写入文件时,您可以使用ReadDirectoryChangesW代码来监视这些文件写入。

- 的Jeroen

相关问题