У меня следующая задача. Необходимо дождаться окончания редактирования файлов 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 возвращает false сразу после первого сохранения файла OpenOffice Writer. Есть предложения?
============================
Я нахожу следующее решение:
repeat
WaitFile(FFileInfo.lpFile, 333);
Sleep(1000);
until not FileIsBusy(FFileInfo.lpFile);
После сохранения ОО выпускает файл на некоторое время и снова эксклюзивно делится