Déterminer si un dossier est partagé dans .NET

Existe-t-il un moyen dans le cadre du .net pour déterminer si un dossier est partagé ou non?

Ni Diretory, DirectoryInfo ou FileAtsortingbutes ne semblent avoir de champ correspondant.

Une chose que j’ai oublié de mentionner est que je veux vérifier les partages réseau. Mais j’examinerai les trucs WMI.

Vous pouvez utiliser WMI Win32_Share. Jeter un coup d’œil à:

http://www.gamedev.net/community/forums/topic.asp?topic_id=408923

Affiche un exemple pour interroger, créer et supprimer des dossiers partagés.

Vous pouvez obtenir une liste de tous les dossiers partagés à l’aide de WMI Win32_Share et voir si le dossier que vous recherchez est entre eux. Voici un extrait qui pourrait vous aider avec ceci:

public static List GetSharedFolders() { List sharedFolders = new List(); // Object to query the WMI Win32_Share API for shared files... ManagementObjectSearcher searcher = new ManagementObjectSearcher("select * from win32_share"); ManagementBaseObject outParams; ManagementClass mc = new ManagementClass("Win32_Share"); //for local shares foreach (ManagementObject share in searcher.Get()){ ssortingng type = share["Type"].ToSsortingng(); if (type == "0") // 0 = DiskDrive (1 = Print Queue, 2 = Device, 3 = IPH) { ssortingng name = share["Name"].ToSsortingng(); //getting share name ssortingng path = share["Path"].ToSsortingng(); //getting share path ssortingng caption = share["Caption"].ToSsortingng(); //getting share description sharedFolders.Add(path); } } return sharedFolders; } 

S’il vous plaît noter que j’ai copié-collé brutalement à partir de ce lien sur des octets

Une autre façon de dépeindre ce chat est d’utiliser powershell (si vous l’avez installé) pour appeler l’appel wmi, inclure une référence à System.Management.Automation, il sera très probablement dans \ program files \ assemblies de référence \ microsoft \ windowspowershell

 private void button1_Click(object sender, EventArgs e) { Runspace rs = RunspaceFactory.CreateRunspace(); rs.Open(); Pipeline pl = rs.CreatePipeline(); pl.Commands.AddScript("get-wmiobject win32_share"); SsortingngBuilder sb = new SsortingngBuilder(); Collection list = pl.Invoke(); rs.Close(); foreach (PSObject obj in list) { ssortingng name = obj.Properties["Name"].Value as ssortingng; ssortingng path = obj.Properties["Path"].Value as ssortingng; ssortingng desc = obj.Properties["Description"].Value as ssortingng; sb.AppendLine(ssortingng.Format("{0}{1}{2}",name, path, desc)); } // do something with the results... } 

Essayez d’utiliser WMI et de faire une requête SELECT * FROM Win32_ShareToDirectory .