http://sulfurzona.ru/
News
Service
Magazine
Software (Battle City Game, Wallpaper manager, Superpad, VG-NOW, Puzzle Game, Netler Internet Browser, ..)
Wing-Thunder Game (fly simulator)
Dune Game (Dune III, Dune IV, Cheats, Forum, ..)
Games free
Turbo Pascal (Assembler, Docs, Sources, Debbugers, ..)
Books (Docs for developers)
Guest book
Компьютерная диагностика двигателя автомобиля (адаптер К-линии)Компьютерная диагностика двигателя автомобиля (адаптер К-линии)
 
 
Скачать игру Крыло-Гром (Wing-Thunder) бесплатно
 
 

FileExists выдает окно ошибки при чтении файла 

 
Автор: Владислав Демьянишин
 
В Delphi при работе функции FileExists в момент обращения к файлу на несуществующем диске появляется диалоговое окно «Диск отсутствует» (рис. 1). Продолжить работу программы при этом можно, нажав на кнопку «Продолжить», но событие неприятное и многих пользователей может ввести в ступор.
 
Рис. 1
 
Решается это очень просто, при этом применение блока Try..Except здесь не поможет. А вот системная функция SetErrorMode может оказаться очень кстати.
 
Функция SetErrorMode WinAPI Windows определяет то, как операционная система будет обрабатывать некоторые типы серьезных ошибок. Когда установлен режим SEM_FAILCRITICALERRORS, операционная система не будет выводить окно критической ошибки. Вместо этого операционная система отправит сообщение об ошибке в вызывающий процесс, то есть нашей программе, что нам и необходимо. Главное - потом включить прежний режим обратно. Вот ее заголовок:
 
function SetErrorMode( Mode: integer ): integer;
 
Функция устанавливает режим обработки ошибок, но в то же время возвращает текущий (старый) режим. Этот старый режим необходимо сохранить в переменной типа integer, а в конце нашего кода восстановить. Функция SetErrorMode может принимать следующие значения:
 
SEM_FAILCRITICALERRORS - Если этот флаг установлен, операционная система не отображает окно сообщения обработчика критических ошибок при возникновении такой ошибки. Вместоэтогооперационнаясистемаотправляетошибкувызывающемупроцессу.
 
SEM_NOGPFAULTERRORBOX - Если этот флаг установлен, операционная система не отображает окно сообщения об общей ошибке защиты при возникновении такой ошибки. Этот флаг должен устанавливаться только отладочными приложениями, которые сами обрабатывают ошибки general protection (GP) с помощью соответствующего обработчика исключений.
 
SEM_NOOPENFILEERRORBOX - Если этот флаг установлен, операционная система не отображает окно сообщения, когда ей не удается найти файл. Вместо этого ошибка возвращается вызывающему процессу.
 
Например, изначальнонашкодвыгляделтак:
 
if FileExists( s ) then
    Slots.AddObject( s, pointer( PosY ) );
 
Тогда с учетом применения системной функции SetErrorMode перепишем код вот так:
 
procedure TForm1.ReadIniSlots;
var PosY, OldMode : integer;
     s : string;
begin
// Отключаем системную обработку ошибок и передаем обработку нашей программе
OldMode := SetErrorMode( SEM_FAILCRITICALERRORS );
 
if FileExists( s ) then
    Slots.AddObject( s, pointer( PosY ) );
 
// Восстанавливаем обычный режим обработки ошибок
SetErrorMode( OldMode );
end;
 
Благодаря этой комбинации, при обращении к файлу на несуществующем диске (например, извлеченный CD-ROM или DVD-ROM, сетевой диск) система не станет выводить собственное диалоговое окно ошибки, а позволит функции FileExists вернуть, как ей и положено, значение false и наша программа сама сможет отработать возникшую ситуацию как нам это нужно. И это без всяких пугающих окошек.
 
© Владислав Демьянишин
 
 
На нашем сайте можно не только бесплатно скачать игры, но и документацию и книги по программированию на MIDLetPascal, Turbo Pascal 6, Turbo Pascal 7, Borland Pascal, по программированию устройств Sound Blaster, Adlib, VESA BIOS, справочник Norton Guide и много другой полезной информации для программистов, включая примеры решения реальных задач по созданию резидентных программ.
 

Журнал > Программирование > FileExists выдает окно ошибки при чтении файла
 
 
 
 
 
 
На главную страницу На предыдущую страницу На начало страницы