C # заполнение дерева и получение ошибок в каталогах, которые я не имею разрешения на чтение - PullRequest
2 голосов
/ 25 января 2010

Я заполняю древовидный элемент управления 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 ]

1 голос
/ 25 января 2010

Для упрощенного подхода:

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 голосов
/ 25 января 2010

Что касается тестирования, я думаю, что предыдущий вопрос охватывает его: как вы можете легко проверить, запрещен ли доступ к файлу в .NET?

Что касается указания приложению игнорировать его, просто поместите ваш вызов на result.Nodes.Add() внутри блока условий тестирования, поэтому, если разрешения не существует, ни один узел не добавляется. Если вы решите пойти с try...catch, убедитесь, что вы глотаете правильный SecurityException, потому что здесь могут возникнуть другие исключения, но это все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...