Тест на перенаправление папки «Мои документы» - PullRequest
8 голосов
/ 08 февраля 2010

Можно ли проверить перенаправление папок в .net? Я не имею в виду повторные точки / соединения, я имею в виду, когда папка (обычно Мои документы) перенаправляется на сервер.

В таких случаях, если вы перебираете систему папок на ПК, вы столкнетесь с ошибкой ввода-вывода, если достигнете локальной версии папки. Поэтому было бы полезно иметь возможность проверить перенаправление папки «Мои документы», чтобы иметь возможность предпринимать действия (пропустить папку, перейти на сервер и т. Д.).

Я знаю, что могу определить местоположение моих документов (но только для текущего пользователя), используя Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), но это не помогает мне заранее проверить его для (потенциально) нескольких пользователей.

Нужно ли использовать что-то вроде SHGetKnownFolderPath?

Ответы [ 3 ]

1 голос
/ 12 февраля 2010

Трудно будет получить 100% безошибочное решение для этого (кроме перехвата исключений при доступе - как предложил другой отвечающий) - но вот мой лучший шанс.

Создайте Dictionary<string, string>, используя как можно больше общих расположений для этих папок (например, «c: \ users [имя пользователя] \ Мои документы», «d: \ users [имя пользователя] \ Мои документы») вдоль с фактическим местоположением, которое они на самом деле, от Environment. Проходя по иерархии каталогов, ищите каталог в этом словаре, чтобы увидеть, есть ли у вас запись (если вы используете словарь - используйте компаратор StringComparer.InvariantCultureIgnoreCase при построении, чтобы избежать необходимости разбираться со случаем путей).

Я должен сказать, что, возможно, вам придется прибегнуть к перехвату исключения IO в конце; потому что структура папок является полностью личной - если бы у меня была резервная копия моей папки Users \ на диске D: тогда этот подход был бы запутан!

1 голос
/ 08 февраля 2010

Вы можете запросить ключ реестра:

http://support.microsoft.com/kb/221837

Вы также можете запросить групповую политику для перенаправления:

http://technet.microsoft.com/en-us/library/cc781907(WS.10).aspx

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

0 голосов
/ 10 февраля 2010

Я не уверен, какую цель вы пытаетесь достичь, вы можете получить каталог в любом месте вашего дерева, к которому у вас может не быть разрешения, чтобы вам приходилось ловить исключения в любом случае. Но одним из способов определить, имеете ли вы дело с сетевым диском, может быть использование DriveInfo в сочетании с запросом к корню папки mydocuments.

String myDocumentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
String myDocumentsRoot = Directory.GetDirectoryRoot(myDocumentsPath);
DriveInfo[] info = DriveInfo.GetDrives();
...