Sem*_*lev 3 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;
Run Code Online (Sandbox Code Playgroud)
这种方法很适合使用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);
Run Code Online (Sandbox Code Playgroud)
保存后,ОО发布文件一段时间并再次独占分享
我不同意你的方法是conventional approach.
轮询不应该是convention,它应该是一个last resort.
不同的办公套件将使用不同的方式写入文件.
有些人会写入新文件,并在完成后重命名该文件.
有些会重命名旧文件,然后写入文件.
有些人可能会执行锁定.
您应该了解您的办公套件将如何编写这些文件.
为此,您需要监控正在发生的事情.
Windows具有ReadDirectoryChangesW功能,并且OSnews发布了一个很好的A Directory Monitor Class For Delphi.还有一个很好的MSDN FWatch示例,解释了如何使用ReadDirectoryChangesW.
很明显,当您了解哪个办公套件写入文件时,您也可以使用ReadDirectoryChangesW代码来监视这些文件写入.
--jeroen
| 归档时间: |
|
| 查看次数: |
1370 次 |
| 最近记录: |