3

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

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

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

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

Вопросы

  1. Как получить сетевые диски, которые настроены, но в автономном режиме?
  2. Есть ли другой способ перечисления общих ресурсов UNC, или я придерживаюсь использования вышеупомянутых вызовов interop?
  3. WNetEnumResource возвращал мне пустой узел для «Службы терминалов Microsoft». Как я могу отфильтровать это, без фильтрации на основе английского текста?
  4. Веб-папки, возвращенные WNetEnumResource, не являются удобными для пользователя именами, которые я им назначил, когда я их создал, но находятся в формате IP-Address @ Port, например. \\[email protected]. Как получить удобные для пользователя имена для веб-папок?
  5. Веб-папки, которые были в автономном режиме, вообще не отображались, но в Windows Explorer они появляются. Любые предложения по получению тех, которые находятся в автономном режиме?

ответ

0

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

Enumerating Network Drives/Shares

здесь образец приложение, которое вы можете попробовать, как скважина от 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)); 
+1

Интересно и хорошо работает для получения доступа к локально определенным акциям. Меня интересуют акции, определенные на других компьютерах в сети, как в \\ OtherComputer \ SomeShare. – Elan

+0

Вы знакомы с WMI ..? Я пришлю вам образец того, как обращаться к другим удаленным машинам, если вам интересно. – MethodMan

+0

Да, пожалуйста, сделайте, если это поможет мне добраться туда, куда я хочу пойти :). – Elan