2010-01-25 75 views
2

我填充一个TreeView控件,C#的Visual Studio 8,使用此代码收到错误信息:C#填充TreeView和目录上的,我没有权限读取

private TreeNode TraverseDirectory(string path) 
    { 
     TreeNode result = new TreeNode(path); 
     foreach (var subdirectory in Directory.GetDirectories(path)) 
     { 
      result.Nodes.Add(TraverseDirectory(subdirectory)); 
     } 

     return result; 
    } 

麻烦的是,如果我点击,说c:/驱动器我在没有权限阅读的目录上出现错误。我的问题是,如何避免显示那些我没有权限的目录?我将如何测试,然后告诉应用忽略它们?

感谢R.

+0

使用try/catch是一种可能性 – 2010-01-25 05:58:09

+0

谢谢,我会告诉你明天的一天,累了:) – flavour404 2010-01-25 06:35:52

回答

1

对于一个简单的方法:

TreeNode result; 
try { 
    string[] subdirs = Directory.GetDirectories(path); 
    result = new TreeNode(path); 
    foreach(string subdir in subdirs) { 
     TreeNode child = TraverseDirectory(subdir); 
     if(child != null) { result.Nodes.Add(child); } 
    } 
    return result; 
} catch (FindTheSpecificException) { 
    // ignore dir 
    result = null; 
} 
return result; 

亲自我想尝试和做一些延迟加载,但IIRC这包括添加虚节点与标准TreeView

+0

谢谢马克我明天会去,因为它迟到了,脑力也越来越大低... :) – flavour404 2010-01-25 06:36:22

0

至于测试,我觉得这先前的问题涵盖了它:how can you easily check if access is denied for a file in .NET?

至于告诉应用程序忽略它,只是把你的电话给result.Nodes.Add()测试条件方框内,因此,如果权限不存在,没有添加节点。如果您决定使用try...catch,请确保您正在吞咽正确的SecurityException,因为此处可能会出现其他异常情况,但就是这样。

+0

谢谢,我会记住它,并有一个去吧:) – flavour404 2010-01-25 06:36:42