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

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

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

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

Web (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 Ответ

0 голосов
/ 19 января 2012

да, вы можете сделать это, посмотрите на этот сайт, и он покажет вам, как это сделать в 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));
...