Ответ Джозефа работает отлично - я вызвал функцию filenotopen
и изменил строку, если
Result := (HFileRes = INVALID_HANDLE_VALUE);
до
Result := NOT (HFileRes = INVALID_HANDLE_VALUE);
Я также удалил строку «если нет (Результат), затем начало» (и «конец»), чтобы она ВСЕГДА закрывала дескриптор или последующие назначения и считывала ошибки
Я сейчас называю это так
if filenotopen(filename) then
begin
assignfile(f,filename);
reset(f)
etc;
end
else
message('file open by a different program')