2008-09-25 4 views
9

¿Hay alguna manera de atravesar el .NET Framework para determinar si una carpeta está compartida o no?Determinar si una carpeta se comparte en .NET

Ni Diretory, DirectoryInfo ni FileAttributes parecen tener ningún campo correspondiente.

Una cosa que olvidé mencionar es que quiero verificar las cuotas de red. Pero investigaré las cosas de WMI.

Respuesta

4

Puede usar WMI Win32_Share. Tome un vistazo a:

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

muestra un ejemplo para consultar, crear y borrar carpetas compartidas.

+0

me puede decir cómo comprobar la carpeta compartida en la PC local existe. Necesito probarlo desde la PC de bolsillo (usando .net compact framework), consulte este https://stackoverflow.com/questions/25710537/check-shared-path-is-available-in-pc – user2681579

0

Intente utilizar WMI y hacer una consulta SELECT * FROM Win32_ShareToDirectory.

9

Puede obtener una lista de todas las carpetas compartidas utilizando WMI Win32_Share y ver si la carpeta que está buscando está entre ellas. He aquí un fragmento que pueden ayudar con esto:

public static List<string> GetSharedFolders() 
{ 

    List<string> sharedFolders = new List<string>(); 

    // 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()){ 

    string type = share["Type"].ToString(); 

    if (type == "0") // 0 = DiskDrive (1 = Print Queue, 2 = Device, 3 = IPH) 
    { 
    string name = share["Name"].ToString(); //getting share name 

    string path = share["Path"].ToString(); //getting share path 

    string caption = share["Caption"].ToString(); //getting share description 

    sharedFolders.Add(path); 
    } 

    } 

    return sharedFolders; 

} 

Tenga en cuenta que brutalmente copia-pegar de esta link en bytes

+0

¿Puede decirme cómo verificar que exista la carpeta compartida en el PC local.I necesita probarlo desde la PC de bolsillo (usando .NET Compact Framework), consulte este https://stackoverflow.com/questions/25710537/check-shared-path-is-available-in-pc – user2681579

4

Una más manera de pelar este gato es utilizar PowerShell (si lo tiene instalado) para invocar la llamada WMI, incluir una referencia a System.Management.Automation, lo más likley estar en \ archivos de programa \ conjuntos de referencia \ 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"); 

    StringBuilder sb = new StringBuilder(); 
    Collection<PSObject> list = pl.Invoke(); 
    rs.Close(); 
    foreach (PSObject obj in list) 
    { 
    string name = obj.Properties["Name"].Value as string; 
    string path = obj.Properties["Path"].Value as string; 
    string desc = obj.Properties["Description"].Value as string; 

    sb.AppendLine(string.Format("{0}{1}{2}",name, path, desc)); 
    } 
    // do something with the results... 
} 
Cuestiones relacionadas