|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
16.01.2012, 19:27 | #1 |
C++, Java
Старожил
Регистрация: 10.04.2010
Сообщений: 2,665
|
Перехват ошибок ввода-вывода
Вот такой вопрос. Насколько я понял из MSDN, все ошибки ввода-вывода являются производными от IOException. Т.е. вообще все? Ошибка открытия файла, файл в некорректном состоянии, и всё остальное? И правильно ли так будет перехватить все такие ошипки?
Код:
|
16.01.2012, 19:34 | #2 |
Участник клуба
Регистрация: 03.05.2007
Сообщений: 1,189
|
Если быть уверенным, что возможна только ошибка I/O то этот код правильный. Если же в блоке try...catch будет другая логика, то надо обрабатывать и ошибки другого типа. Лично я всегда обрабатываю все ошибки:
Код:
Код:
|
16.01.2012, 20:12 | #3 |
C++, Java
Старожил
Регистрация: 10.04.2010
Сообщений: 2,665
|
Опа, прикольно. Спасибо.
|
16.01.2012, 21:19 | #4 | |
Участник клуба
Регистрация: 15.07.2008
Сообщений: 1,933
|
Цитата:
Код:
|
|
18.01.2012, 14:20 | #5 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
Базовый Exception перехватывать не рекомендуется. http://msdn.microsoft.com/ru-ru/library/ms229005.aspx
|
18.01.2012, 14:30 | #6 |
Форумчанин
Регистрация: 18.01.2012
Сообщений: 975
|
Не рекомендуется != не нужно. Особенно на верхних уровнях логики. Внезапная смерть программы из-за необработанного некритического исключения тоже не есть хорошо
Благодарить в репутацию. Проклинать — туда же
|
18.01.2012, 15:41 | #7 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
Во-первых, в дотнете программы не умирают, а выдают осмысленное сообщение с возможностью проигнорировать исключение. А во-вторых, непредсказуемое поведение программы из-за какого-нибудь экзотического исключения (которое программист никак не предвидел) ничем не лучше.
Исключения из правила: 1) Если программа вообще не должна выдавать сообщения об ошибке, например, какой-нибудь скрытый шпион. :) 2) Если каждое исключение должно сопровождаться каким-то действием, при этом исключение не должно подавляться. Например: Код:
Последний раз редактировалось ds.Dante; 18.01.2012 в 15:55. |
18.01.2012, 17:29 | #8 | ||
Форумчанин
Регистрация: 18.01.2012
Сообщений: 975
|
Цитата:
Цитата:
Код:
В случае, если скорректировать работу программы после возникновения ошибки (даже непредусмотренной) не получается, то, безусловно, программа должна завершить работу. Не тупо свалиться с дефолтным сообщением дотнета, а выдать нормальное сообщение с причиной краха. По хорошему еще и запротоколировать крах в лог. Хотя в подавляющем большинстве случаев в моих проектах эту логику реализует обработчик Application.UnhandledException (или Dispatcher.UnhandledException)
Благодарить в репутацию. Проклинать — туда же
|
||
18.01.2012, 20:26 | #9 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
18.01.2012, 23:28 | #10 | ||
Форумчанин
Регистрация: 18.01.2012
Сообщений: 975
|
Цитата:
В WPF или Silverlight дела обстоят именно так, как я описал. Цитата:
И, тем не менее, остаюсь при мнении, что исключения должен обрабатывать программист. Даже если программа при их возникновении должна завершаться
Благодарить в репутацию. Проклинать — туда же
|
||
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
отключение ошибок ввода вывода | nikolas0 | Общие вопросы Delphi | 5 | 06.02.2011 00:15 |
перехват ошибок | Марк Охман | БД в Delphi | 5 | 08.12.2010 16:03 |
Перехват ошибок компилятора | Яр|/||< (^_^) | Общие вопросы Delphi | 4 | 27.03.2010 16:07 |
Перехват ошибок от Windows | DRUNE | Софт | 2 | 09.04.2009 13:24 |
перехват консольного ввода\вывода | Артем5555555 | Win Api | 14 | 28.10.2008 23:20 |