Консультация № 177088
06.03.2010, 20:16
0.00 руб.
0 18 2
Здравствуйте Уважаемые эксперты.
Работаю с Borland Delphi 7. Подскажите пожалуйста, как сделать так, чтобы при использовании функций таких как memo1.lines.loadfromfile(''); или же image1.picture.loadfromfile('');, в случае отсутствия такого файла программа не выдавала ошибку, а например загружала другой файл ну или что либо еще выполняла.

Обсуждение

Неизвестный
06.03.2010, 20:25
общий
Dimon4ik:
Попробуйте проверять существование файла:
if FileExists(s) then
image1.picture.loadfromfile(s)
else
image1.picture.loadfromfile(s1);
Неизвестный
06.03.2010, 20:28
общий
это ответ
Здравствуйте, Dimon4ik.
Перед открытием файла проверяйте его наличие функцией FileExists(имя файла) и если нет такого файла, то измените имя или еще что-нибудь

Приложение:
if FileExists(aFilename) then
memo1.lines.loadfromfile(aFilename)
else begin
aFilename:= 'другой файл';
memo1.lines.loadfromfile(aFilename)
end;
5
Неизвестный
06.03.2010, 20:31
общий
это ответ
Здравствуйте, Dimon4ik.
Например такой код:

Приложение:
if FileExists(FileName) then
memo1.lines.loadfromfile(FileName)
else
memo1.lines.Add('Файла с именем '+FileName+' не существует')ж
5
Неизвестный
06.03.2010, 21:13
общий
Мне больше в таких случаях обрабатывать исключительные ситуации:
Код:
try
...
except
on E:EInOutError ...
end
Неизвестный
06.03.2010, 21:54
общий
Boriss:
Вы так имели ввиду?

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
try
memo1.lines.LoadFromFile('C:\1.sa');
except
on E:EInOutError do showmessage('Нет файла');
end
end;


У меня почему то не работает. Выдается стандартная ошибка о том что файл не существует...
Неизвестный
06.03.2010, 21:57
общий
А на самом деле есть?
Неизвестный
06.03.2010, 22:00
общий
Нет. Файла нет.
Но выдается не "Нет файла",
а Cannot open file...
Неизвестный
06.03.2010, 22:03
общий
Dimon4ik:
Ошибка выдается в отладчике?
Вы пробовали просто продолжить программу после вывода ошибки. Просто в отладчике, по умолчанию, все ошибки передаются отладчику, а не поступают в программу.
Попробуйте запустить программу не через отладчик.
Неизвестный
06.03.2010, 22:03
общий
Selax, Влaдимир, Patriotix-N спасибо. Предложенный вами способ хорошо работает.
Неизвестный
06.03.2010, 22:08
общий
Да, в отладчике. Как пропустить ее в отладчике не знаю. При нажатии на ОК на программу уже переключить не выходит.
Сейчас запускаю через .ехе уже с диска, выдает чуть чуть другую ошибку.
Неизвестный
06.03.2010, 22:14
общий
Dimon4ik:
Замените на EFOpenError
Неизвестный
06.03.2010, 22:16
общий
Patriotix-N:
Все работает. Супер!
Спасибо
Неизвестный
06.03.2010, 22:28
общий
Dimon4ik:
На будующее:
Если захотите отловить какое либо прерывание(ошибку) в программе.
Вот что вам выдавал отладчик при запуске вашей программы:


Выписываете код ошибки из сообщения и отлавливаете его в программе с помощью структуры приведенной Boriss'ом.
Неизвестный
06.03.2010, 22:31
общий
Patriotix-N:
Понял. Спасибо Вам.
Неизвестный
06.03.2010, 22:35
общий
Да уж, проверил сейчас: генерируется EFOpenError, описанное в Classes
Проверить можно так:
Код:
except
on E : Exception do
begin
ShowMessage('Exception class name = '+E.ClassName);
ShowMessage('Exception message = '+E.Message);
end;


То есть, надо писать так:
Код:
 on E: EFOpenError do ShowMessage('Error '+fname);


Вообще-то обработка исключительных ситуаций - это более современный метод программирования
И не забывайте по замечание Patriotix-N
Неизвестный
06.03.2010, 22:36
общий
Да, и никакого Message у это исключения нет! Не предусмотрено почему-то, наверно, считают, что надо стандартное показывать
Неизвестный
06.03.2010, 22:41
общий
Boriss:
Спасибо. Буду знать
Неизвестный
06.03.2010, 23:04
общий
Dimon4ik:
Цитата: 218629
При нажатии на ОК на программу уже переключить не выходит.

Надо еще раз нажать F9.
Форма ответа