Как я могу перечислить сетевые папки и веб-папки в C#?

.Net предоставляет нам элемент управления FolderBrowserDialog для поиска папок. Это, однако, модальное диалоговое окно. Мне нужно создать пользовательский элемент управления, который я могу добавить в форму. Итак, я пытался создать свой собственный, где мне нужно получить все локальные диски, подключенные сетевые диски, общие папки UNC и веб-папки (WebDAV/SharePoint). Я использую Windows 7 и.Net 4.0.

Локальные и подключенные сетевые диски
Я могу получить локальные диски от DriveInfo.GetDrives(). Тем не менее, они только показывают мне диски, которые доступны / онлайн. В проводнике Windows также отображаются подключенные сетевые диски, которые отключены / недоступны.

Сетевые папки /UNC-ресурсы
Из того, что я нашел до сих пор, в.Net, похоже, нет механизма для перечисления долей UNC. Кажется, что я должен использовать Interop to Win32 API, чтобы использовать WNetOpenEnum а также WNetEnumResource функции для перечисления окрестности сети. Я получил это работает, но мне было интересно, если не было другого пути.

Веб (WebDAV) папки и SharePoint
В проводнике Windows я настроил несколько папок WebDAV. Использование тех же вызовов Interop выше WNetOpenENum а также WNetENumResource Я получил узел "Сеть веб-клиентов" и появились папки WebDAV, которые были подключены и доступны.

Вопросы

  1. Как получить подключенные сетевые диски, которые настроены, но находятся в автономном режиме?
  2. Есть ли другой способ перечисления общих ресурсов UNC, или я застрял с использованием вышеупомянутых вызовов взаимодействия?
  3. WNetEnumResource возвращал мне пустой узел для "Microsoft Terminal Services". Как я могу отфильтровать это без фильтрации на основе английского текста?
  4. Веб-папки, возвращенные WNetEnumResource не являются удобными именами, которые я им назначил при создании, но они имеют формат IP-адрес @ порт, например \\nnn.nnn.nnn.nnn@18123, Как получить понятные имена для веб-папок?
  5. Веб-папки, которые были отключены, вообще не появлялись, но в Windows Explorer они появляются. Любые предложения по получению тех, кто не в сети?

1 ответ

Да, вы можете сделать это, посмотрите на этот сайт, и он покажет вам, как сделать это в VB, а также C#

Перечисление сетевых дисков / общих ресурсов

вот пример приложения, которое вы также можете попробовать из codeproject

//

// Enumerate shares on local computer

//

Console.WriteLine("\nShares on local computer:");
ShareCollection shi = ShareCollection.LocalShares;
if (shi != null) 
{
    foreach(Share si in shi) 
    {
        Console.WriteLine("{0}: {1} [{2}]", 
            si.ShareType, si, si.Path);

        // If this is a file-system share, try to

        // list the first five subfolders.

        // NB: If the share is on a removable device,

        // you could get "Not ready" or "Access denied"

        // exceptions.

        if (si.IsFileSystem) 
        {
            try 
            {
                System.IO.DirectoryInfo d = si.Root;
                System.IO.DirectoryInfo[] Flds = d.GetDirectories();
                for (int i=0; i < Flds.Length && i < 5; i++)
                    Console.WriteLine("\t{0} - {1}", i, Flds[i].FullName);

                Console.WriteLine();
            }
            catch (Exception ex) 
            {
                Console.WriteLine("\tError listing {0}:\n\t{1}\n", 
                    si, ex.Message);
            }
        }
    }
}
else
    Console.WriteLine("Unable to enumerate the local shares.");

//

// Resolve local paths to UNC paths.

//

Console.WriteLine("{0} = {1}", 
    fileName, ShareCollection.PathToUnc(fileName));
Другие вопросы по тегам