C# 在不同的代码块中处理相同的IO异常

C# 在不同的代码块中处理相同的IO异常,c#,winforms,architecture,exception-handling,io,C#,Winforms,Architecture,Exception Handling,Io,我正在从事一个WinForms项目,该项目涉及多个IO调用。IO带来了巨大的责任,因为许多IO方法很容易出现异常(UnauthorizedAccess/file in use/等) 我想知道如何最好地处理代码中多个点中的相同异常。例如,如果我在7个不同的代码块中调用FileInfo.CopyTo(),所有这些代码块都可能引发UnauthorizedAccessExceptions,我应该如何处理?我知道,普遍共识规定,只有在能够妥善处理例外情况时,才应抓住例外情况。我不确定处理未经授权的访问异常

我正在从事一个WinForms项目,该项目涉及多个IO调用。IO带来了巨大的责任,因为许多IO方法很容易出现异常(UnauthorizedAccess/file in use/等)

我想知道如何最好地处理代码中多个点中的相同异常。例如,如果我在7个不同的代码块中调用
FileInfo.CopyTo()
,所有这些代码块都可能引发
UnauthorizedAccessException
s,我应该如何处理?我知道,普遍共识规定,只有在能够妥善处理例外情况时,才应抓住例外情况。我不确定处理未经授权的访问异常的“正确”方法,但我确实希望显示一个
消息框
,通知用户该文件未被复制

在这种情况下,我必须将对
CopyTo()
的7个调用包装在
try
/
catch
语句中,并弹出相同的
MessageBox
7次。为了避免重用代码,我的第一个想法是创建如下内容:

public void SafeCopy(FileInfo file, string targetPath)
    {
        try
        {
            file.CopyTo(targetPath);
        }
        catch (UnauthorizedAccessException ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
这显然是简化的,可以处理额外的异常。然而,创建一个“包装器方法”来处理单个方法调用的异常,感觉是不对的


我知道这可能被认为是主观的,但我觉得这里有一个正确的答案或替代路径

我会说,异常对用户真的有帮助吗?如果没有,我会将它们包装成一个签名,如
booltrycopyto()
。让它处理异常日志记录等,让任何让调用成功与否的人都知道。但这实际上是一件好事。@ErikPhilips在我看来,异常对用户很有帮助,因为它允许用户解决应用程序无法解决的问题。例如,如果异常显示这是访问冲突,他们可以检查文件的安全设置。如果文件正被另一个进程使用,他们可以关闭该进程。您所做的是完全可以接受的,这是很好的代码。