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, потому что есть и другие исключения, которые могут произойти здесь, но это все.