VB.NET覚書

VB.NETの覚書
[個人メモ] [仕事メモ] [アイデア] [Ruby]
[TIPS] [対応表] [コメント書き方] [.NET Tips] [VB中学校] [VB.NET の入門サイト] [VB.NET コーディング標準 ] [VBレスキュー] [NonSoft]

2013-09-04

registry(レジストリ操作)

Public Class ClsRegistry

    Function readRegistry(key As String) As String
        'キー(HKEY_CURRENT_USER\Software\test\sub)を読み取り専用で開く
        Dim regkey As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey(key, False)
        'キーが存在しないときは null が返される
        If regkey Is Nothing Then
            Return ("")
        End If

        '文字列を読み込む
        '指定した名前の値が存在しないときは null が返される
        Dim stringValue As String = DirectCast(regkey.GetValue("string"), String)
        'キーに値が存在しないときに指定した値を返すようにするには、次のようにする
        '(ここでは"default"を返す)
        'Dim stringValue As String = DirectCast(regkey.GetValue("string", "default"), String)

        '閉じる
        regkey.Close()
        Return stringValue
    End Function

    Sub writeRegistry(key As String, s As String)
        'キー(HKEY_CURRENT_USER\Software\test\sub)を開く
        Dim regkey As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(key)
        '上のコードでは、指定したキーが存在しないときは新しく作成される。
        '作成されないようにするには、次のようにする。
        'Dim regkey As Microsoft.Win32.RegistryKey = _
        '   Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\test\sub", True)

        'レジストリに書き込み
        '文字列を書き込む(REG_SZで書き込まれる)
        regkey.SetValue("string", s)

        '閉じる
        regkey.Close()
    End Sub
End Class


ファイル検索

Public Class ClsGrep

    ''' ---------------------------------------------------------------------------------------
    ''' <summary>
    '''     指定した検索パターンに一致するファイルを最下層まで検索しすべて返します。</summary>
    ''' <param name="stRootPath">
    '''     検索を開始する最上層のディレクトリへのパス。</param>
    ''' <param name="stPattern">
    '''     パス内のファイル名と対応させる検索文字列。</param>
    ''' <returns>
    '''     検索パターンに一致したすべてのファイルパス。</returns>
    ''' ---------------------------------------------------------------------------------------
    Public Shared Function GetFilesMostDeep(ByVal stRootPath As String, ByVal stPattern As String) As String()
        Dim hStringCollection As New System.Collections.Specialized.StringCollection()

        ' このディレクトリ内のすべてのファイルを検索する
        For Each stFilePath As String In System.IO.Directory.GetFiles(stRootPath, stPattern)
            hStringCollection.Add(stFilePath)
        Next stFilePath

        ' このディレクトリ内のすべてのサブディレクトリを検索する (再帰)
        For Each stDirPath As String In System.IO.Directory.GetDirectories(stRootPath)
            Dim stFilePathes As String() = GetFilesMostDeep(stDirPath, stPattern)

            ' 条件に合致したファイルがあった場合は、ArrayList に加える
            If Not stFilePathes Is Nothing Then
                hStringCollection.AddRange(stFilePathes)
            End If
        Next stDirPath

        ' StringCollection を 1 次元の String 配列にして返す
        Dim stReturns As String() = New String(hStringCollection.Count - 1) {}
        hStringCollection.CopyTo(stReturns, 0)

        Return stReturns
    End Function

End Class

トラックバック - http://sub.g.hatena.ne.jp/garyo/20130904