Как я могу перечислить сетевые папки и веб-папки в 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, которые были подключены и доступны.
Вопросы
- Как получить подключенные сетевые диски, которые настроены, но находятся в автономном режиме?
- Есть ли другой способ перечисления общих ресурсов UNC, или я застрял с использованием вышеупомянутых вызовов взаимодействия?
WNetEnumResource
возвращал мне пустой узел для "Microsoft Terminal Services". Как я могу отфильтровать это без фильтрации на основе английского текста?- Веб-папки, возвращенные
WNetEnumResource
не являются удобными именами, которые я им назначил при создании, но они имеют формат IP-адрес @ порт, например\\nnn.nnn.nnn.nnn@18123
, Как получить понятные имена для веб-папок? - Веб-папки, которые были отключены, вообще не появлялись, но в 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));