LastError := GetLastError;

if LastError = ERROR_iCOPENDING

then begin if WaitForSingleObject(OverlapRd.hEvent, INFINITE)=wait_OBJECT_0

then

GetOverlappedResult (FHandle, OverlapRd, nb, TRUE) ; end else

raise EAbort.Create (Format ( 'Read failed, error %d' , [LastError] ) ) ;
end;
Result := nb;
CloseHandle(hEvent);
end;

Если вы задали конечный интервал в миллисекундах, а операция еще не закончена, WaitForSingleObject вернет код завершения wait_timeout. Функция GetOverlappedResult возвращает в параметре nb число байтов, действительно прочитанных или записанных во время отложенной операции.

Контроль ошибок ввода/вывода

При работе с файлами разработчик обязательно должен предусмотреть обработку возможных ошибок. Практика показывает, что именно операции ввода/вывода вызывают большую часть ошибок, возникающих в приложении из-за воздействия окружающей программной среды.

Контроль за ошибками ввода/вывода зависит от применяемых функций. При использовании доступа через Win32 API все функции возвращают код ошибки Windows, который и нужно проанализировать.

При возникновении ошибок ввода/вывода в функциях, использующих файловые переменные, генерируется исключительная ситуация класса EInOutError. Но так происходит только в том случае, если включен контроль ошибок ввода/вывода. Для этого используются соответствующие директивы компилятора:

□ {$1+} - контроль включен (установлен по умолчанию);

□ {$!-} - контроль отключен.

Класс EinOutError отличается тем, что у него есть поле ErrorCode. При возникновении этой исключительной ситуации вы можете получить его значение и принять решение. Основные коды имеют такие значения:

О 2- файл не найден;
□ 3 - неверное имя файла;
□ 4 - слишком много открытых файлов;
• 5 - доступ запрещен;
□ 100 - достигнут конец файла;
□ 101 - диск переполнен;

□ 106 - ошибка ввода.

При отключенном контроле в случае возникновения ошибки выполнение программы продолжается без остановки. Однако в этом случае устранение возможных последствий ошибки возлагается на разработчика. Для этого применяется функция

function IOResult: Integer;

которая возвращает значение 0 при отсутствии ошибок.

Атрибуты файла. Поискфайла

Еще одна часто выполняемая с файлом операция - поиск файлов в заданном каталоге. Для организации поиска и отбора файлов используются специальные процедуры, а также структура, в которой сохраняются результаты поиска.

Запись

type

TFileNarae = string; TSearchRec = record

Time: Integer; {Время и дата создания}

Size: Integer; {Размер файла}

Attr: Integer; {Параметры файла}

Name: TFileName; {Полное имя файла}

ExcludeAttr; Integer; {Не используется}

BindHandle: THandle; {Дескриптор файла}

BindData: TWin32FindData;
{Не используется} end;

обеспечивает хранение характеристик файла после удачного поиска. Дата и время создания файла хранятся в формате MS-DOS, поэтому для получения этих параметров в принятом в Delphi формате TDateTime необходимо использовать следующую функцию:


⇐ Предыдущая страница| |Следующая страница ⇒

Программирование в Delphi 7



Новости за месяц

  • Июнь
    2020
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31