マイナーでもいいよね??

殆どVB系、でも .NET じゃない VB は知らないよん

目次

Blog 利用状況

書庫

日記カテゴリ

DirectoryAccessクラスに追加した共有フォルダ関連のメソッド

DirectoryAccess クラスに追加した共有フォルダ関連のメソッドのコードです。(前回追加したコードはこちら

 

VB

'共有フォルダを取得します。

Public Shared Function GetVolumes() As IList(Of Volume)

  Dim folders As New List(Of Volume)()

  If CanConnectDomain Then  'ドメインに接続できる時

    Using root = GetRootEntry()   'ルートのDirectoryEntryを取得

      Dim filter = String.Format("(objectCategory={0})", CategoryType.Volume)

      Using searcher As New DirectorySearcher(root, filter)

        Using results = searcher.FindAll()

          For Each res As SearchResult In results

            folders.Add(DirectCast(CreateInstance(res.GetDirectoryEntry()), Volume))

          Next

        End Using

      End Using

    End Using

  End If

  Return folders

End Function

 

C#

//共有フォルダを取得します。

public static IList<Volume> GetVolumes()

{

  var folders = new List<Volume>();

  if (CanConnectDomain)    //ドメインに接続できる時

  {

    using (var root = GetRootEntry())    //ルートのDirectoryEntryを取得

    {

      var filter = String.Format("(objectCategory={0})", CategoryType.Volume);

      using (var searcher = new DirectorySearcher(root, filter))

      {

        using (var results = searcher.FindAll())

        {

          foreach (SearchResult res in results)

          {

            folders.Add((Volume)CreateInstance(res.GetDirectoryEntry()));

          }

        }

      }

    }

  }

  return folders;

}

 

DirectoryObject のインスタンスを作成する CreateInstance メソッドに共有フォルダ部分のコード(太字の部分)を追加しました。

VB

Private Shared Function CreateInstance(entry As DirectoryEntry) As DirectoryObject

  Dim category As CategoryType

  If [Enum].TryParse(Of CategoryType)(entry.SchemaClassName, True, category) = False Then

    Throw New ArgumentException("entry の種類が CategoryType に該当しません。", "entry")

  End If

 

  Select Case category

    Case CategoryType.User

      If CanConnectDomain Then    'ドメインに接続できる時

        Return New DomainUser(entry)

      Else    'ドメインに接続できない時

        Return New LocalUser(entry)

      End If

    Case CategoryType.Group

      If CanConnectDomain Then    'ドメインに接続できる時

        Return New DomainGroup(entry)

      Else    'ドメインに接続できない時

        Return New LocalGroup(entry)

      End If

    Case CategoryType.Computer

      Return New Computer(entry)

    Case CategoryType.PrintQueue

      Return New PrintQueue(entry)

    Case CategoryType.Volume

      Return New Volume(entry)

    Case Else

      Throw New NotImplementedException()

  End Select

End Function

 

C#

private static DirectoryObject CreateInstance(DirectoryEntry entry)

{

  CategoryType category;

  if (Enum.TryParse<CategoryType>(entry.SchemaClassName, true, out category) == false)

  {

    throw new ArgumentException("entry の種類が CategoryType に該当しません。", "entry");

  }

 

  switch (category)

  {

    case CategoryType.User:

      if (CanConnectDomain)    //ドメインに接続できる時

      {

        return new DomainUser(entry);

      }

      else    //ドメインに接続できない時

      {

        return new LocalUser(entry);

      }

    case CategoryType.Group:

      if (CanConnectDomain)    //ドメインに接続できる時

      {

        return new DomainGroup(entry);

      }

      else    //ドメインに接続できない時

      {

        return new LocalGroup(entry);

      }

    case CategoryType.Computer:

      return new Computer(entry);

    case CategoryType.PrintQueue:

      return new PrintQueue(entry);

    case CategoryType.Volume:

      return new Volume(entry);

    default:

      throw new NotImplementedException();

  }

}

投稿日時 : 2014年1月28日 0:53

コメントを追加

No comments posted yet.
タイトル
名前
URL
コメント