我正在使用下面的LINQ查询来获取目录列表。我收到错误消息(用户代码未处理System.UnauthorizedAccessException)。如何仅加载我有权访问的目录。
var files = from f in System.IO.Directory.GetDirectories(@"\\testnetwork\abc$",
"*.*",
SearchOption.AllDirectories)
select System.IO.Path.GetDirectoryName(f);
错误:
拒绝访问路径“ \ testnetwork \ abc $ \ DemoFolder \”。
最佳答案
使用Catch捕获UnauthorizedAccessException。 。
string[] directories = Directory.EnumerateDirectories(@"\\testnetwork\abc$","*.*", SearchOption.AllDirectories).Catch(typeof(UnauthorizedAccessException)).ToArray();
ExceptionExtensions:
static class ExceptionExtensions
{
public static IEnumerable<TIn> Catch<TIn>(
this IEnumerable<TIn> source,
Type exceptionType)
{
using (var e = source.GetEnumerator())
while (true)
{
var ok = false;
try
{
ok = e.MoveNext();
}
catch(Exception ex)
{
if (ex.GetType() != exceptionType)
throw;
continue;
}
if (!ok)
yield break;
yield return e.Current;
}
}
}
关于c# - LINQ中的C#处理System.UnauthorizedAccessException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12373529/