iniファイルの読み込み

解決


マグ  2004-07-02 10:11:42  No: 114443  IP: [192.*.*.*]

名前のとおりですが、

iniファイルを読み込む方法を教えてください。
お願いします。

環境はVB.NETです。

編集 削除
魔界の仮面弁士  2004-07-02 10:26:28  No: 114444  IP: [192.*.*.*]

GetPrivateProfileString API等を使ってみてください。

編集 削除
マグ  2004-07-02 11:11:36  No: 114445  IP: [192.*.*.*]

見ても、さっぱりわかりません。
できれば、ソースを教えてください。
お願いします。

編集 削除
SKY  2004-07-02 11:24:37  No: 114446  IP: [192.*.*.*]

http://www.asahi-net.or.jp/~ef2o-inue/api/sub08_01_050.html
参考になるかわかりませんが^^;

編集 削除
マグ  2004-07-02 17:16:52  No: 114447  IP: [192.*.*.*]

エラーが出てしまい原因が分かりません。
教えてください。
お願いします。

Public Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" _
   (ByVal lpAppName As String, ByVal lpKeyName As String, _
    ByVal lpDefault As String, ByVal lpReturnedString As String, _
    ByVal nSize As Integer, ByVal iniFilename As String) As Integer
    Dim nFileName As String         'ファイル名称(フルパス)
    Dim Ret As Integer                 '戻り値
    Dim strTemp As String           '一時格納変数
    Dim intLen As Integer              '文字列長

    Public Function GetIni(ByVal section As String, ByVal Key As String, ByVal DefaultString As String) As String

        'INIファイル名取得
        'nFileName = GetAppPath()
        With OpenFileDialog1
            .FileName = ""
            .Filter = "iniファイルの読み込み|*.ini"
            .ShowDialog()
            nFileName = .FileName
        End With
        'バッファを確保
        strTemp = ""
        strTemp = strTemp.PadLeft(1024, Chr(0))
        intLen = Len(strTemp)

        Ret = GetPrivateProfileString(section, Key, DefaultString, _
           strTemp, intLen, nFileName)
        Return Left(strTemp, InStr(strTemp, Chr(0)) - 1)  '←ここでエラーが発生します。

    End Function

    Private Function GetAppPath() As String
        Dim fi As New System.IO.FileInfo( _
            System.Reflection.Assembly.GetExecutingAssembly.Location)
        Return fi.DirectoryName
    End Function

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        GetIni(1, "aaa", "sss")
    End Sub

================================================
iniファイルの中身

[aaa]
sss=実験

編集 削除
nanashi  2004-07-02 17:38:41  No: 114448  IP: [192.*.*.*]

エラーって、構文エラーですよね?
それはVB6の構文なんでVB.NET風に書き換えてください。

編集 削除
マグ  2004-07-02 18:20:03  No: 114449  IP: [192.*.*.*]

たしかに構文エラーかも?
Leftでエラーが発生していた。

書き換え方が分かりません。
どうすればいいか教えてください。
お願いします。

できれば、書き換えてください。
お願いします。

編集 削除
nanashi  2004-07-02 18:53:42  No: 114450  IP: [192.*.*.*]

教えるのは簡単ですが出来るだけ自分で考えてください。
難しいことはありません。

まずは『Left』の部分ををSubstringで処理してください。
とりあえずはそれで動きます。
とはいえ、おそらく期待通りの挙動をしないと思われるところがありますが……。

編集 削除
マグ  2004-07-02 22:28:52  No: 114451  IP: [192.*.*.*]

Leftをsubstrigに変えたのに、データが取得できないです。
どこが原因でしょうか?

Public Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" _
       (ByVal lpAppName As String, ByVal lpKeyName As String, _
        ByVal lpDefault As String, ByVal lpReturnedString As String, _
        ByVal nSize As Integer, ByVal iniFilename As String) As Integer
    Dim nFileName As String         'ファイル名称(フルパス)
    Dim Ret As Integer                 '戻り値
    Dim strTemp As String           '一時格納変数
    Dim intLen As Integer              '文字列長

    Public Function GetIni(ByVal section As String, ByVal Key As String, ByVal DefaultString As String) As String

        'INIファイル名取得
        'nFileName = GetAppPath()
        With OpenFileDialog1
            .FileName = ""
            .Filter = "iniファイルの読み込み|*.ini"
            .ShowDialog()
            nFileName = .FileName
        End With
        'バッファを確保
        strTemp = ""
        strTemp = strTemp.PadLeft(1024, Chr(0))
        intLen = Len(strTemp)

        Ret = GetPrivateProfileString(section, Key, DefaultString, _
           strTemp, intLen, nFileName)
        Return strTemp.Substring(InStr(strTemp, Chr(0)) - 1)
    End Function

    Private Function GetAppPath() As String
        Dim fi As New System.IO.FileInfo( _
            System.Reflection.Assembly.GetExecutingAssembly.Location)
        Return fi.DirectoryName
    End Function

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        GetIni(0, "aaa", "sss")
    End Sub
===============================================-
iniファイルの中身

[aaa]
sss=実験

編集 削除
マグ  2004-07-02 23:07:48  No: 114452  IP: [192.*.*.*]

VB6はさわり程度しか(変数とfor文とif文とswitch文と配列しか)やっていなかったので、

VB6のソースをVB.NETのソースに変えるのにかなりきつかったです。

でも、やっと出来た。

nanashiさん
ありがとうございます。

編集 削除