Почему я получаю сообщение об ошибке отказа в доступе к папке «Документы и настройки»? - PullRequest
3 голосов
/ 16 декабря 2011

Я пишу программу, которая получает все каталоги и подкаталоги.Я использую следующий код:

DriveInfo[] drives = DriveInfo.GetDrives();
foreach (DriveInfo drive in drives)
{
    string[] directories = Directory.GetDirectories(drive.Name, "*", SearchOption.AllDirectories);
}

Но я получаю исключение о том, что "Доступ к пути C: \ Documents and Settings \ 'запрещен".

Iя использую Windows 7, и я не вижу папку C: \ Documents and Settings \ в проводнике.Я включил «Показать скрытые файлы и папки» и даже попытался ввести путь напрямую, но он выдает следующую ошибку: «C: \ Documents and Settings не доступен. Доступ запрещен».

Почему Directory.GetDirectories() тянет каталог, который, кажется, не существует?

Ответы [ 3 ]

15 голосов
/ 16 декабря 2011

Этот каталог называется так называемой точкой соединения , которая должна указывать на c: \ users.

Из документации MSDN:

Эти точки соединенияих можно определить следующим образом:

У них установлены атрибуты файлов FILE_ATTRIBUTE_REPARSE_POINT, FILE_ATTRIBUTE_HIDDEN и FILE_ATTRIBUTE_SYSTEM.

У них также есть списки управления доступом (ACL), установленные для запрета доступа на чтение для всех.1011 *

Приложения, которые вызывают определенный путь, могут проходить через эти точки соединения, если у них есть необходимые разрешения.Однако попытки перечислить содержимое точек соединения приведут к сбоям.

0 голосов
/ 30 октября 2016

Поработав некоторое время, я решил написать код самостоятельно.

Я делюсь здесь основной идеей, а не полным кодом - возьмите важную часть и используйте ее для реализации в своем коде.

работал для меня.

public void directoryCrawl(string startFolder)
    {

    try
    {
        System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(startFolder);

        /* here you can add "dir" to some kind of list of your choice. */

        foreach (System.IO.DirectoryInfo directory in dir.GetDirectories())
        {
            try
            {
                directoryCrawl(directory.FullName);
            }
            catch
            {
                Console.Writeline("Access denied to: \"" + directory.FullName + "\".");
            }
        }
    }
    catch
    {
        if (!String.IsNullOrEmpty(startFolder))
        {
            Console.Writeline("Access denied to: \"" + startFolder + "\".");
        }
        }
        return;
    }
0 голосов
/ 16 декабря 2011

Я не знаю, как обойти это, но могу вам сказать, что WinXP использовал этот путь.Старые программы, написанные с ожиданием возможности доступа к этой папке, не были бы совместимы с Win7, поэтому Microsoft перенаправляет их в папку «Пользователи».

Если я запускаю Пуск -> Выполнить c:\Documents and Settings, я также получаю ошибку Access is Denied.Так что что-то есть.

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