2008-09-25 81 views
9

有沒有通過.net框架確定文件夾是否共享的方法?確定文件夾是否在.NET中共享

Diretory,DirectoryInfo或FileAttributes都沒有任何相應的字段。

我忘了提的一件事是我想檢查網絡共享。但我會調查WMI的東西。

回答

4

您可以使用WMI Win32_Share。 看看:

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

顯示查詢,創建和刪除共享文件夾的樣本。

+0

你能告訴我如何檢查共享文件夾在本地電腦存在。我需要從袖珍電腦(使用.net的緊湊框架),請參閱此https://stackoverflow.com/questions/25710537/check-shared-path-is-a-p-p-p – user2681579 2014-09-07 13:23:05

0

嘗試使用WMI並執行SELECT * FROM Win32_ShareToDirectory查詢。

9

您可以使用WMI Win32_Share獲得所有共享文件夾的列表,並查看您要查找的文件夾是否位於它們之間。這裏有一個片段,它可以幫助您與此:

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; 

} 

請注意,我狠狠地從這個link複製粘貼字節

+0

你能告訴我如何檢查共享文件夾在本地電腦存在。我需要從Pocket PC進行測試(使用.net精簡框架),請參閱https://stackoverflow.com/questions/25710537/check-shared-path-is-available-in-pc – user2681579 2014-09-07 13:23:29

4

對皮膚這隻貓還有一個方法是使用PowerShell的(如果你有的話安裝)來調用WMI調用,包括對System.Management.Automation參考,它最likley在\ Program Files文件\引用程序集\微軟\ 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... 
}