C# 抓住并吃掉一个例外

C# 抓住并吃掉一个例外,c#,.net,exception,log4net,logging,C#,.net,Exception,Log4net,Logging,我有下面的代码 try { fileInfo.CopyTo(destination, true); } catch (IOException ioex) { } Log4net日志: 35552|384|1|ERROR| at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 我需要吃掉这个异常,而不是记录它。我需要消除此错误消息 如何做到这一点?将函数调用置于try/catch中,捕获有问题的异

我有下面的代码

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

}
Log4net日志:

35552|384|1|ERROR| at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
我需要吃掉这个异常,而不是记录它。我需要消除此错误消息

如何做到这一点?

将函数调用置于try/catch中,捕获有问题的异常,并提供一个空块:

try
{
    fileInfo.CopyTo(destination, true);
}
catch (Exception)
{
    // do nothing
}
请注意,捕获异常(而不是正确的子类)是一种糟糕的做法

好的,当我写这篇文章时,这个问题被偷偷地编辑了。对于log4net记录所有通过CLR的异常,我一无所知。我将很快删除它,但现在我将保留它,以备进一步评论。

将函数调用放入try/catch,捕获有问题的异常,并提供一个空块:

try
{
    fileInfo.CopyTo(destination, true);
}
catch (Exception)
{
    // do nothing
}
请注意,捕获异常(而不是正确的子类)是一种糟糕的做法


好的,当我写这篇文章时,这个问题被偷偷地编辑了。对于log4net记录所有通过CLR的异常,我一无所知。我将很快删除它,但现在我将保留它以备进一步评论。

我怀疑您需要查看Log4net,看看是否有一种方法可以只记录未处理的异常(如果需要的话),或者告诉它忽略特定位置的异常

但是为什么你特别想隐藏这个呢?如果是因为这种情况经常发生,并用无用的信息填充日志,那么您可能需要在调用
CopyTo
之前进行一些验证,以确保有合理的成功机会(即路径有效、文件存在等)。这也将首先减少抛出异常的数量。异常在性能方面有点昂贵,因此如果可以的话,您希望防止它们发生

正如我在一篇关于这个问题的评论中提到的,您不能完全删除异常处理,因为在检查文件是否存在和实际调用
CopyTo
之间,总是有可能有另一个程序删除了该文件,但这种情况应该非常罕见


如果这种情况不经常发生和/或您已经在进行检查,那么偶尔记录这种情况会有什么危害?

我想您需要查看Log4net,看看是否有一种方法可以只记录未处理的异常(如果需要的话),或者告诉它忽略特定位置的异常

但是为什么你特别想隐藏这个呢?如果是因为这种情况经常发生,并用无用的信息填充日志,那么您可能需要在调用
CopyTo
之前进行一些验证,以确保有合理的成功机会(即路径有效、文件存在等)。这也将首先减少抛出异常的数量。异常在性能方面有点昂贵,因此如果可以的话,您希望防止它们发生

正如我在一篇关于这个问题的评论中提到的,您不能完全删除异常处理,因为在检查文件是否存在和实际调用
CopyTo
之间,总是有可能有另一个程序删除了该文件,但这种情况应该非常罕见


如果这种情况不经常发生和/或您已经在进行检查,那么偶尔记录这种情况有什么害处?

不要调用log。捕获中有错误?@David:我猜他正在处理一个记录未处理异常的代码库,而且他无法控制未处理的异常处理程序。@Harpo这将大大降低异常发生的可能性,但对于IO内容,您仍然需要捕获并适当处理异常,因为无法保证在检查时间和执行IO操作时间之间,某些外部程序没有修改磁盘,因此操作不再有效。(而且…看起来我回复的评论被删除了…)我会在一整天的代码审查中失败。隐藏的异常是我的#1 no-no.@user。我认为这是特定于log4net的,您可能会更幸运地标记它并将其命名为log4net。也许还可以看看Log4net关于记录异常时有异常的文档。不要调用log。捕获中有错误吗?@David:我猜他正在编写一个记录未处理异常的代码库,而且他无法控制未处理的异常处理程序。@Harpo这将大大降低异常发生的可能性,但对于IO内容,您仍然需要捕获并适当处理异常,因为无法保证在检查时间和执行IO操作时间之间,某些外部程序没有修改磁盘,因此操作不再有效。(而且…看起来我回复的评论被删除了…)我会在一整天的代码审查中失败。隐藏的异常是我的#1 no-no.@user。我认为这是特定于log4net的,您可能会更幸运地标记它并将其命名为log4net。也许还可以看看Log4net关于记录异常时有异常的文档。这是一个比OP最初发布的代码更好的解决方案吗?他应该坚持接受一个特定的例外,只要确保它是正确的(并且在所有难以证明的情况下都是可忽略的)。Log4net可能有一些特定的东西,记录所有抛出的异常,在这种情况下,他应该查阅文档或等待熟悉Log4net的回答者。@P.Brian.Mackey:哦,不公平。他编辑了这个问题!在这种情况下,我显然对log4net不够熟悉。我不知道你能截获异常捕获。我觉得这是一种可怕的做法——如果一些设计拙劣的库使用异常来表示故障情况会怎么样?除了可能被吃掉的例外,这些原木将被完全污染!我的想法是,因为这不是一个例外,而是一个错误。正如它所说的。有可能吃掉这些错误吗?试着去尝试一下怎么样