2010-01-25 72 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