Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.09.2011, 17:08   #1
Vova777
Уважаемый
Форумчанин
 
Аватар для Vova777
 
Регистрация: 04.07.2010
Сообщений: 318
По умолчанию Обработка исключений (файлы).

Парни, подскажите, как правильно использовать инструкцию try ...except в данном фрагменте кода:
Код:
Memo1.Lines.LoadFromFile(FName);
Нужно просто если файла нет, то: ShowMessage('Файла нет!') и Exit из процедуры.
даешь высокое напряжение
Vova777 вне форума Ответить с цитированием
Старый 12.09.2011, 17:16   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну файл может быть и при исключении
Код:
try 
 Memo1.Lines.LoadFromFile(FName);
except
 ShowMessage('Не удается загрузить файл "'+FName+'"');
end;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 12.09.2011, 17:18   #3
Vova777
Уважаемый
Форумчанин
 
Аватар для Vova777
 
Регистрация: 04.07.2010
Сообщений: 318
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
ну файл может быть и при исключении
Код:
try 
 Memo1.Lines.LoadFromFile(FName);
except
 ShowMessage('Не удается загрузить файл "'+FName+'"');
end;
Т.е. так можно:
Код:
...
try
  begin
    Memo1.Lines.LoadFromFile(FName);
    ... //еще инструкции
  end;
except
  begin
    ShowMessage('Не удается загрузить файл "'+FName+'"');
    Exit;
  end;
...
даешь высокое напряжение
Vova777 вне форума Ответить с цитированием
Старый 12.09.2011, 17:42   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

да, только внутри блоков begin end лишние, ибо try except end уже блоки.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 12.09.2011, 17:45   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

А что FileExists() уже отменили?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.09.2011, 19:29   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Виталий, ну мне тебе обьяснять, что наличие файла, еще не дает возможности его открыт.
да и поймать исключение куда проще(+можно специфицировать исключения, чтоб выдать точную причину не возможности открытия)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 12.09.2011, 21:38   #7
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Тогда уж:
Код:
except
  on E: Exception do
    ShowMessage(Format('Не удаётся загрузить файл "%s":'#13#10'%s', [FName, E.Message]);
end;
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 12.09.2011, 21:46   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Виталий, ну мне тебе обьяснять, что наличие файла, еще не дает возможности его открыт.
а на мой взгляд, одно другому не мешает.
Т.е. я бы лично обязательно проверил FileExists()
если бы файла нет - то обработка по ветке алгоритма - "Файл не существует", если же файл есть, то открытие его в блоке try .. except.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.09.2011, 21:50   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
если бы файла нет - то обработка по ветке алгоритма - "Файл не существует"
0)как я говорил файл может быть, но открыть его нельзя.
1)почему нельзя это сделать в обработчике except?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 12.09.2011, 21:51   #10
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Т.е. я бы лично обязательно проверил FileExists()
Вообще-то это зависит от обработки.

Пусть файла нет.

Что мы хотим сделать? Показать сообщение "извините, не могу открыть файл, потому что его нет"? Но тогда у нас получается дублирование проверки:

Код:
if not FileExists(FName) then
begin
  ShowMessage(Format('Не удаётся загрузить файл "%s":'#13#10'Файла нет.', [FName]);
  Exit;
end;
try
  Memo1.Lines.LoadFromFile(FName);
except
  on E: Exception do
    ShowMessage(Format('Не удаётся загрузить файл "%s":'#13#10'%s', [FName, E.Message]);
end;
В чём смысл такой проверки? Дублируется код. Дублируются строковые константы (они - разные, а потому не могут быть разшарены). Не говоря уже про ситуацию создания/удаления файла между моментами проверки и загрузки).

Но проверка через FileExists будет вполне нормальным, если нам, наоборот, нужно не показывать сообщение об ошибке:

Код:
if FileExists(FName) then
try
  Memo1.Lines.LoadFromFile(FName);
except
  on E: Exception do
    ShowMessage(Format('Не удаётся загрузить файл "%s":'#13#10'%s', [FName, E.Message]);
end;
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка исключений Ckomoroh Общие вопросы Delphi 6 21.03.2011 08:52
обработка исключений user666 Помощь студентам 36 27.08.2010 18:00
Обработка исключений _-Re@l-_ Общие вопросы Delphi 3 17.06.2010 08:53
обработка исключений scray PHP 3 15.05.2010 15:02
Обработка исключений try... except Kati Помощь студентам 5 07.03.2010 10:18