共有フォルダ一覧取得 WMI版
WMIで書き直してみた。ユーザ認証も含んでる。こっちのほうが断然短い。
/// <summary> /// 指定されたサーバの共有フォルダ一覧を取得します。 /// </summary> /// <param name="serverPaht">サーバ名。</param> /// <param name="user">接続ユーザ名。</param> /// <param name="password">接続パスワード。</param> /// <returns>取得された共有フォルダの一覧。</returns> public static List<string> GetFiles( string serverPaht, string user, string password ) { ConnectionOptions option = new ConnectionOptions { Username = user, Password = password, }; ManagementScope scope = new ManagementScope( ConcatenateNetworkPath( serverPaht, "\\root\\cimv2" ), option ); ObjectQuery query = new ObjectQuery( "Select * From Win32_Share" ); ManagementObjectSearcher searcher = new ManagementObjectSearcher( scope, query ); ManagementObjectCollection collection = searcher.Get(); List<string> list = new List<string>(); foreach (ManagementObject managementObject in collection) { list.Add( string.Format( managementObject["Name"].ToString() ) ); } return list; } /// <summary> /// ネットワークパスを結合します。 /// </summary> /// <param name="basePath">ベースパス。</param> /// <param name="path">結合するパス。</param> /// <returns>結合されたネットワークパス。</returns> static string ConcatenateNetworkPath( string basePath, string path ) { if (basePath.EndsWith( "\\" )) { if (path.StartsWith( "\\" )) { path = path.TrimStart( new[] { '\\' } ); } } else { if (!path.StartsWith( "\\" )) { return basePath + "\\" + path; } } return basePath + path; }
使い方
GetFiles( @"\\192.168.0.1", "username", "password" ); GetFiles( @"\\servername", "username", "password" );