次の仕事があります。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;
このアプローチは、Open Officeではなく、MicrosoftWordによるファイルの編集でうまく機能します。OpenOfficeは、MS Officeと同じように、多重度ファイルを開くために1つのプロセスを使用します。しかし、OpenOffice Writerにはいくつかの問題があります。関数FileIsBusyは、OpenOfficeWriterで最初にファイルを保存した直後にfalseを返します。何か提案はありますか?
============================
私は次の解決策を見つけます:
repeat
WaitFile(FFileInfo.lpFile, 333);
Sleep(1000);
until not FileIsBusy(FFileInfo.lpFile);
保存後、ООはしばらくの間ファイルをリリースし、再び独占的に共有します