如何获取抛出 UnauthorizedAccessException 异常的路径?

4

请问在C#中,当捕获到UnauthorizedAccessException时,是否有可能访问引发该异常的路径?我不想要错误消息,只需要导致问题的路径。我当前的try catch块可以捕获多个异常,但我需要报告它并继续到下一个目录/文件,而不是添加整个异常消息。


可能是Data属性中的一个关键字?令人惊讶的是,这方面没有记录的API。 - StackOverthrow
2个回答

4
也许您可以将错误处理更加细化,这样只有在出现错误时才会捕获单个尝试。您可以通过将有问题的代码重构为实用方法来实现此操作(而无需重复自己)-即:
TryCopyFile(path1);
TryCopyFile(path2);
TryCopyFile(path3);

TryCopyFile会捕获异常并记录传递的单个路径。


听从了您的建议,改进了错误处理方式并更加细致化。 - Trotts

1
在UnauthorizedAccessException的Message属性中,您会看到类似于以下内容的信息:
Access to the path 'E:\Domains\xxx\wwwroot\Images\main.aspx' is denied.

你可以从这条消息中解析出路径。

1
这种方法很可能会导致可移植性、本地化以及可能是较新版本的 .net 框架出现问题。 - marklam
1
是的,我考虑过这样做,但我认为由于异常消息是静态的,并且只是向消息添加一个变量,可能有一些直接访问该变量而不是解析它的方法,因此我想先检查是否可能。 - Trotts
1
这是一个糟糕的API,需要你解析错误信息。 - StackOverthrow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接