IOResult, функция

Синтаксис


function IOResult:  Integer;

Описание

В Delphi имеется два способа уведомления об ошибке ввода/ввода-ошибки времени выполнения и функция lOResult. По умолчанию Delphi сообщает об ошибках ввода/вывода как о других ошибках времени выполнения, и модуль SysUtils преобразует эти ошибки в исключительные ситуации. Если для отключения ошибок ввода/вывода применяется директива $I- или $IOChecks Off, Delphi возвращает статус операций ввода и вывода через функцию IOResult. Программист сам отвечает за своевременный вызов IOResult для проверки успеха или не успеха вызова каждой процедуры или функции ввода/вывода.
IOResult возвращает ноль в случае успеха или код ошибки в случае неудачи. Код ошибки может быть либо кодом ошибки Windows, либо одним из следующих кодов ошибок Delphi.

Код ошибки Описание
100 Чтение за границами файла
101 Диск переполнен
102 Не была вызвана процедура AssignFile
103 Файл закрыт
104 Файл не открыт для ввода
105 Файл не открыт для вывода
106 Неверный формат данных для процедуры Read

После вызова lOResult код ошибки ввода/вывода сбрасывается в ноль. I IOResult - настоящая функция.

Ошибки

Советы и приемы

  • В каждом потоке имеется собственный код результата операций ввода/вывода, поэтому вызывайте lOResult в контексте нужного вам потока.
  • Программист сам отвечает за вызов lOResult после обращения к каждой подпрограмме ввода/вывода. Если не проверить значение lOResult, последующий вызов подпрограммы ввода/вывода перепишет старый код ошибки новым значением.
  • Модуль SysUtils преобразует ошибки ввода/вывода в исключительную ситуацию EInOutError. Этот класс содержит текстовые сообщения лишь для небольшого числа кодов ошибок ввода/вывода. В реальном приложении следует перехватывать ElnOutError и анализировать код ошибки самостоятельно. Например, функции обработчика OnException в приложении может выполнять следующий код:
     
      procedure TForm1.AppEventsException(Sencier: TObject; E: Exception);
      resourcestring
        sEOF = 'Попытка чтения за границами файла';
        sNotAssigned = 'Файл не назначен';
        sNotOpen = 'Файл не был открыт';
        sNotRead   = 'Файл не был открыт для ввода';
        sNotWrite  = 'Файл не был открыт для вывода';
        sBadRead   = 'Ошибка входного формата';
      begin
        if E is EInOutError then
          case EInOutError(E).ErrorCode of
            100:  E.Message  := sEOF;
            101:  E.Message  := SysErrorMessage(Error_Disk_Full);
            102:  E.Message  := sNotAssigned;
            103: E.Message := sNotOpen;
            104: E.Message := sNotRead;
            105: E.Message := sNotWrite;
            106: E.Message := SBadRead;
            else E.Message := SysErrorMessage(EInOutError(E).ErrorCode);
          end;
        Application.ShowException(e);
      end;      

Пример


// Создание каталога.   Если каталог существует,  ничего делать не нужно.
procedure CreateDir(const Dir:  string);
type
  TErrorProc = procedure(Error: integer;  Addr:  Pointer);
var
  Error:  Integer;
begin
  {$IOChecks Off}
  MkDir(Dir);
  {SIOChecks On}
  Error := IOResult;
  if (Error <> 0) and (Error <> Error_Already_Exists) then
    // Some error other than that the directory already exists.  
    TErrorProc(ErrorProc)(Error, @CreateDir);
end;

Смотрите также

Процедуры Append, AssignFile, BlockRead, BlockWrite, ChDir, CloseFile,
Erase, Flush, MkDir, Read, ReadLn, Rename, Reset, Rewrite, RmDir, Seek, SetTextBuf, Truncate, Write, WriteLn, функции Eof, Eoln, FilePos, FileSize, SeekEof, SeekEoln.
    Учебник по языку Pascal          Лабораторные работы по программированию          Справочник

Реклама