【问题标题】:C# treeview Unauthorized exceptionC# treeview 未经授权的异常
【发布时间】:2012-02-22 15:49:49
【问题描述】:

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

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

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

VS 2010 指出问题所在。

subSubDirs = subDir.GetDirectories();

我可以尝试解决这个问题,但是,抛出异常后应用程序无法继续。

有没有办法跳过应用无法访问的目录?

【问题讨论】:

  • 请发布您的代码,包括您将try catch 放在哪里。
  • 对我来说听起来像是权限问题。最有可能尝试访问 C 的根目录:(我认为较新版本的 Windows 对此有一些保护)。正如 ChrisF 所说,发布您的代码将帮助您获得更好的答案。

标签: c# exception-handling file-permissions getdirectories


【解决方案1】:

您可能将 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)

【讨论】:

    【解决方案2】:

    您会收到异常,因为调用帐户没有对 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 获取文件和目录信息。

    【讨论】:

      猜你喜欢
      • 2019-03-11
      • 2014-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-21
      • 2020-05-30
      • 1970-01-01
      • 2017-03-23
      相关资源
      最近更新 更多