Как перехватить управление при ошибке в/в?

После считывания или записи всегда проверяйте как прошла операция! Для этого в Паскале предусмотрены ключи {$I-} и {$I+}, пример:

Var IoRes    : Integer;
    f        : File of text;
 
Procedure Error(IO:Integer);
Begin
 Writeln('Произошла ошибка #',IO);
 Readln;
End;
 
BEGIN
 Assign(F,'c:\temp\example.txt');
 Repeat
  {$I-}
  Reset(F);
  IoRes:=IOResult;
  {$I+}
  If IoRes<>0 then Error(IoRes);
 Until IoRes=0;
 {$I-}
 Write(F,'Hello world!');
 IORes:=IOResult;
 {$I+}
 If IoRes<>0 then Error(IORes);
END.