Страницы

Поиск по вопросам

вторник, 5 марта 2019 г.

Узнать букву диска зная адрес шары

Допустим, есть \\share\lala , как мне программно узнать какой букве диска на сервере соответствует данная шара?


Ответ

Это можно сделать через WMI для которого в .NET есть обертка.
Вам понадобится добавить в проект ссылку на System.Management.DLL и указать в коде using System.Management;
Выведем все имеющиеся "шары" с указанием полного пути к локальной папке
var oManager = new ManagementClass("Win32_Share"); foreach(ManagementObject oShare in oManager.GetInstances()) { var strShareName = oShare .Properties .Cast() .First(x => x.Name == "Name") .Value.ToString(); var strSharePath = oShare .Properties .Cast() .First(x => x.Name == "Path") .Value.ToString(); if(strSharePath == "") strSharePath = "***UNDEFINED***"; Console.WriteLine(strShareName + " - " + strSharePath); }
strPath будет содержать полный путь к шаре, из которого достать букву диска уже совсем просто - например так:
var di = new DirectoryInfo(strSharePath); Console.WriteLine(di.Root);
Добавив совсем немного кода, можно сделать поиск данных "шары" по ее сетевому имени.
Приведенный пример позволяет узнать пути к общим папкам на локальной машине, однако WMI позволяет также обращаться к удаленным машинам, при наличии соответствующих прав у пользователя и необходимых разрешениях на удаленной машине. Подробнее про удаленное подключение и безопасность WMI в документации на MSDN тут и тут
Идея взята с pinvoke.net, там вообще много интересного по использованию WinAPI под .NET

Комментариев нет:

Отправить комментарий