Поймай и съешь исключение - PullRequest
1 голос
/ 16 марта 2011

У меня есть следующий код, который выдает

try
{
    fileInfo.CopyTo(destination, true);
}
catch (IOException ioex)
{

}

Log4net log:

35552|384|1|ERROR| at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)

Мне нужно съесть это исключение и не зарегистрировать его.Мне нужно подавить это сообщение об ошибке.

Как это сделать?

Ответы [ 2 ]

1 голос
/ 16 марта 2011

Я подозреваю, что вам нужно взглянуть на Log4net, чтобы увидеть, есть ли способ либо регистрировать только необработанные исключения (если это то, что нужно), либо способ заставить его игнорировать исключение в определенном месте.

Почему именно вы хотите это скрыть?Если это происходит из-за того, что это часто случается и заполняет журнал бесполезной информацией, тогда вы можете выполнить некоторую проверку перед вызовом CopyTo, чтобы убедиться, что есть разумный шанс, что он преуспеет (то есть путь действителен, файл существует и т. Д.),Это также сократит количество исключений, выдаваемых в первую очередь.Исключения довольно дороги с точки зрения производительности, поэтому вы можете предотвратить их возникновение, если можете.

Как я уже упоминал в комментарии к вопросу, вы не можете полностью удалить обработку исключений, потому что всегда естьвероятность того, что другая программа удалила файл между проверкой его существования и фактическим вызовом CopyTo, но это должно происходить крайне редко.

Если это происходит не часто и / или вы уже выполняете проверки,какой вред в том, что это иногда регистрируется?

0 голосов
/ 16 марта 2011

Поместите вызов функции в try / catch, перехватите рассматриваемое исключение и предоставьте пустой блок:

try
{
    fileInfo.CopyTo(destination, true);
}
catch (Exception)
{
    // do nothing
}

Обратите внимание, что перехват исключения (а не соответствующего подкласса) является УЖАСНЫМпрактика.

Хорошо, вопрос был незаметно отредактирован, когда я писал это.Я понятия не имею, что log4net регистрирует все исключения, которые проходят через CLR.Я удалю это в ближайшее время, но сейчас я оставляю это в случае дальнейшего комментария.

...