C# заполнение treeview и получение ошибок в каталогах, на чтение которых у меня нет разрешения
Я заполняю элемент управления treeview, c# visual studio 8, используя следующий код:
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:/, то я получаю ошибку на каталогах, которые у меня нет разрешения на чтение. Мой вопрос в том, как мне избежать показа тех каталогов, на которые у меня нет разрешения? Как бы я проверил это, а затем сказал приложению игнорировать их?
Спасибо Р.
2 ответа:
Для упрощенного подхода:
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
.
Что касается тестирования, я думаю, что этот предыдущий вопрос охватывает его: Как вы можете легко проверить, если доступ запрещен для файла в .NET?
Что касается указания приложению игнорировать его, просто поместите вызов
result.Nodes.Add()
внутри блока условий тестирования, поэтому, если разрешение не существует, узел не добавляется. Если вы решите пойти сtry...catch
, Убедитесь, что вы проглатываете правильныйSecurityException
, потому что есть и другие исключения, которые могут произойти здесь, но это все.