Come posso elencare le condivisioni di rete e le cartelle Web in C #?

.Net ci fornisce un controllo FolderBrowserDialog per cercare le cartelle. Questa è tuttavia una finestra di dialogo modale. Devo creare un controllo utente che posso rilasciare sul mio modulo. Quindi, ho cercato di creare il mio, in cui ho bisogno di ottenere tutte le unità locali, unità di rete mappate, condivisioni UNC e cartelle Web (WebDAV / SharePoint). Sto usando Windows 7 e .Net 4.0.

Unità di rete locali e mappate
Posso ottenere le unità locali da DriveInfo.GetDrives (). Tuttavia, questi mi mostrano solo le unità disponibili / online. In Esplora risorse, vengono visualizzate anche le unità di rete mappate che sono disconnesse / non disponibili.

Cartelle di rete / Condivisioni UNC
Da quanto ho trovato finora, non sembra esserci un meccanismo in .Net per enumerare le condivisioni UNC. Sembra che io debba utilizzare Interop per le API Win32 per utilizzare le funzioni WNetOpenEnum e WNetEnumResource per enumerare il vicinato di rete. L’ho fatto funzionare, ma mi chiedevo se non esistesse un altro modo.

Cartelle Web (WebDAV) e SharePoint
In Windows Explorer ho configurato alcune cartelle WebDAV. Utilizzando le stesse chiamate di Interop sopra WNetOpenENum e WNetENumResource ho ricevuto un nodo “Web Client Network” e sono state visualizzate le cartelle WebDAV collegate e accessibili.

Domande

  1. Come posso ottenere le unità di rete mappate che sono configurate, ma sono offline?
  2. C’è un altro modo per enumerare le condivisioni UNC o sono bloccato con l’utilizzo delle chiamate di interop denominato sopra?
  3. WNetEnumResource mi restituiva un nodo vuoto per “Servizi terminal Microsoft”. Come posso filtrarlo senza filtrare in base al testo inglese?
  4. Le cartelle Web restituite da WNetEnumResource non sono i nomi WNetEnumResource ho assegnato loro quando li ho creati, ma sono nel formato di IP-Address @ Port, ad esempio \\[email protected] . Come ottengo i nomi descrittivi per le cartelle Web?
  5. Le cartelle Web non in linea non sono state visualizzate, tuttavia in Esplora risorse sono visualizzate. Qualche suggerimento su come ottenere quelli che sono offline?

si puoi farlo dare un’occhiata a questo sito e ti mostrerà come farlo in VB così come C #

Enumerazione di unità di rete / condivisioni

ecco un’app di esempio che puoi provare anche da 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));