C#树视图未经授权的异常

本文关键字:授权 异常 视图 | 更新日期: 2023-09-27 18:22:01

所以我关注了MS的文章http://msdn.microsoft.com/en-us/library/ms171645.aspx

这是使用设计器创建具有ListView和TreeView控件的资源管理器样式接口。

所以一切都很好,howserver,你是否将其设置为C的根以扫描所有文件夹和文件等。我收到{"Access to the path '<path to file' is denied."}

VS 2010指出了这个问题。

subSubDirs = subDir.GetDirectories();

我可以试着抓住这一点,howserver,在抛出异常后,应用程序不会继续。

有没有一种方法可以跳过应用程序无法访问的目录?

C#树视图未经授权的异常

您可能将try-catch放错了位置。根据演练中的代码,您可以像这样放置try-catch:

替换:

subSubDirs = subDir.GetDirectories();

这个:

try 
{
    subSubDirs = subDir.GetDirectories();
}
catch(UnauthorizedAccessException uae)
{
  //log that subDir.GetDirectories was not possible
}

此外,行:

if (subSubDirs.Length != 0)

应更改为:

if (subSubDirs != null && subSubDirs.Length != 0)

您会得到异常,因为调用帐户没有访问System Volume Information等文件夹的权限。您可以通过使用Linq并跳过标记为SystemHidden的文件夹来绕过一些

DirectoryInfo root = new DirectoryInfo(@"C:'");
Func<FileSystemInfo, Boolean> predicate = dir =>
    (dir.Attributes & FileAttributes.System) != FileAttributes.System &&
    (dir.Attributes & FileAttributes.Hidden) != FileAttributes.Hidden;
IEnumerable<FileSystemInfo> directories = root.GetDirectories().Where(predicate);
foreach (DirectoryInfo directory in directories) {
    try {
        Trace.WriteLine(directory.Name);
        DirectoryInfo[] subdirectories = directory.GetDirectories();
    }
    catch (System.UnauthorizedAccessException) {
        Trace.WriteLine("Insufficient access rights.");
    }
}
Trace.WriteLine("End of application.");

不过,这并不是适用于所有场景的解决方案,在某些文件和文件夹上会失败。使用现有的API没有简单的解决方案;您可能希望通过WMI获取文件和目录信息。