Определение, является ли папка общей в .NET - PullRequest
9 голосов
/ 26 сентября 2008

Есть ли способ через .net framework определить, является ли папка общей или нет?

Похоже, что ни у Director, DirectoryInfo, ни у FileAttributes нет соответствующих полей.

Одна вещь, которую я забыл упомянуть, это то, что я хочу проверять сетевые ресурсы. Но я исследую материал WMI.

Ответы [ 4 ]

9 голосов
/ 26 сентября 2008

Вы можете получить список всех общих папок с помощью WMI Win32_Share и посмотреть, находится ли папка, которую вы ищете между ними. Вот фрагмент кода, который может помочь вам в этом:

public static List<string> GetSharedFolders()
{

  List<string> sharedFolders = new List<string>();

  // Object to query the WMI Win32_Share API for shared files...

  ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from win32_share");

  ManagementBaseObject outParams;

  ManagementClass mc = new ManagementClass("Win32_Share"); //for local shares

  foreach (ManagementObject share in searcher.Get()){

  string type = share["Type"].ToString();

  if (type == "0") // 0 = DiskDrive (1 = Print Queue, 2 = Device, 3 = IPH)
  {
    string name = share["Name"].ToString(); //getting share name

    string path = share["Path"].ToString(); //getting share path

    string caption = share["Caption"].ToString(); //getting share description

    sharedFolders.Add(path);
  }

  }

  return sharedFolders;

}

Обратите внимание, что я жестоко скопировал с этой ссылки в байтах

4 голосов
/ 26 сентября 2008

Еще один способ создать скин для этого кота - это использовать powershell (если он у вас установлен) для вызова вызова wmi, включить ссылку на System.Management.Automation, он, скорее всего, будет находиться в \ program files \ reference Сборки \ Microsoft \ WindowsPowerShell

private void button1_Click(object sender, EventArgs e)
{
  Runspace rs = RunspaceFactory.CreateRunspace();
  rs.Open();
  Pipeline pl = rs.CreatePipeline();
  pl.Commands.AddScript("get-wmiobject win32_share");

  StringBuilder sb = new StringBuilder();
  Collection<PSObject> list = pl.Invoke();
  rs.Close();
  foreach (PSObject obj in list)
  {
    string name = obj.Properties["Name"].Value as string;
    string path = obj.Properties["Path"].Value as string;
    string desc = obj.Properties["Description"].Value as string;

    sb.AppendLine(string.Format("{0}{1}{2}",name, path, desc));
  }
  // do something with the results...
}
4 голосов
/ 26 сентября 2008

Вы можете использовать WMI Win32_Share. Взгляните на:

http://www.gamedev.net/community/forums/topic.asp?topic_id=408923

Показывает пример для запросов, создания и удаления общих папок.

0 голосов
/ 26 сентября 2008

Попробуйте использовать WMI и выполните запрос SELECT * FROM Win32_ShareToDirectory.

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