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



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

  • Октябрь
    2017
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс