Quantcast
Channel: わんくま同盟
Viewing all articles
Browse latest Browse all 994

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

$
0
0

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

 

VB

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

Public Shared Function GetVolumes() AsIList(OfVolume)

  Dim folders As NewList(OfVolume)()

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

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

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

      Using searcher As NewDirectorySearcher(root, filter)

        Using results = searcher.FindAll()

          For Each res AsSearchResultIn 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 = newList<Volume>();

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

  {

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

    {

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

      using (var searcher = newDirectorySearcher(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 AsDirectoryEntry) AsDirectoryObject

  Dim category AsCategoryType

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

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

  End If

 

  Select Case category

    CaseCategoryType.User

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

        Return NewDomainUser(entry)

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

        Return NewLocalUser(entry)

      End If

    CaseCategoryType.Group

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

        Return NewDomainGroup(entry)

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

        Return NewLocalGroup(entry)

      End If

    CaseCategoryType.Computer

      Return NewComputer(entry)

    CaseCategoryType.PrintQueue

      Return NewPrintQueue(entry)

    CaseCategoryType.Volume

      Return NewVolume(entry)

    Case Else

      Throw NewNotImplementedException()

  End Select

End Function

 

C#

private staticDirectoryObject CreateInstance(DirectoryEntry entry)

{

  CategoryType category;

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

  {

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

  }

 

  switch (category)

  {

    caseCategoryType.User:

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

      {

        return newDomainUser(entry);

      }

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

      {

        return newLocalUser(entry);

      }

    caseCategoryType.Group:

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

      {

        return newDomainGroup(entry);

      }

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

      {

        return newLocalGroup(entry);

      }

    caseCategoryType.Computer:

      return newComputer(entry);

    caseCategoryType.PrintQueue:

      return newPrintQueue(entry);

    caseCategoryType.Volume:

      return newVolume(entry);

    default:

      throw newNotImplementedException();

  }

}


Viewing all articles
Browse latest Browse all 994

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>