VB.net INI-Datei auslesen

OP #1045731
Lesenswert?

Hallo zusammen

Ich möchte bei einem VB.net projekt die Daten aus einer INI-Datei 
auslesen (Ich weiss, dass diese Variante veraltet ist...!). Wie ich sie 
schreibe, weiss ich, doch habe ich noch nirgends gefunden, wie ich 
geziehlt auslesen kann...

Hoffe ihr könnt mir helfen!
Gast #1046329
Lesenswert?

Hi,

versucht mal:
Public Declare Function FUN_lngGetPrivateProfileString Lib "kernel32" 
Alias "GetPrivateProfileStringA"(ByVal lpApplicationName As String, 
ByVal lpKeyName As String, ByVal lpDefault As String, ByVal 
lpReturnedString As String, ByVal nSize As Integer, ByVal lpFileName As 
String) As Integer

Public Function FUN_strReadIniStr(ByVal i_strSection As String, ByVal 
i_strKeyName As String, ByVal i_strDefault As String, ByVal i_strFile As 
String) As String
  Dim lngSize As Integer
        Dim strValue As String = ""

        Try
            If Len(i_strSection) = 0 Then
                'SUB_AddLog("ModSetup.FUN_ReadIniStr() i_strSection is 
empty")
            End If
            If Len(i_strKeyName) = 0 Then
                'SUB_AddLog("ModSetup.FUN_ReadIniStr() i_strKeyName is 
empty")
            End If
            If Len(i_strFile) = 0 Then
                'SUB_AddLog("ModSetup.FUN_ReadIniStr() i_strFile is 
empty")
            End If

            strValue = 
"----------------------------------------------------------------------- 
----"
            lngSize = FUN_lngGetPrivateProfileString(i_strSection, 
i_strKeyName, "", strValue, Len(strValue), i_strFile)

            If lngSize > 0 Then
                strValue = Left(strValue, lngSize)
            Else
                strValue = i_strDefault
                If Len(i_strDefault) > 0 Then
                    'FUN_lngWritePrivateProfileString(i_strSection, 
i_strKeyName, i_strDefault, i_strFile)
                End If

            End If

            FUN_strReadIniStr = strValue

        Catch ex As System.Exception
            'SUB_Fehler(ex)
            Return strValue
        End Try

    End Function
OP #1046398
Lesenswert?

Das funktioniert schon sehr gut :D
vielen dank!

Ich habe nur noch eine Frage...:
Ich möchte bei einer ListBox der Index auswählen, welcher als letztes 
ausgewählt wurde. Somit speichere ich den Zahlenwert in einer INI-Datei. 
Beim nächsten start wird die Zahl ausgelesen und der ListBox als 
Selected.Index zugewiesen. Ich habe es so gemacht aber es geht nicht:

        ListBox.SelectedIndex = 
CInt(FUN_lngGetPrivateProfileString(...))
#1046421
Lesenswert?

Dex Dexter wrote:
> ...der ListBox als Selected.Index zugewiesen.
>    ListBox.SelectedIndex = CInt(FUN_lngGetPrivateProfileString(...))

Was jetzt: Selected.Index oder .SelectedIndex ?

Schau doch mal, was FUN_lngGetPrivateProfileString(...) liefert, und was 
CInt() daraus macht.
Und auch was passiert, wenn Du ListBox.SelectedIndex (oder 
Selected.Index ?) direkt eine Zahl zuweist.
OP #1046794
Lesenswert?

> Was jetzt: Selected.Index oder .SelectedIndex ?
Macht das einen Unterschied? (bin ziemlich Anfänger...)

> Schau doch mal, was FUN_lngGetPrivateProfileString(...) liefert, und was
> CInt() daraus macht.
Beides liefert den Wert 1, obwohl in der INI eine 0 steht...

> Und auch was passiert, wenn Du ListBox.SelectedIndex (oder
> Selected.Index ?) direkt eine Zahl zuweist.

es ist ListBox.SelectedIndex. Wenn ich 0 zuweise erscheint in der 
Auswahl 3, obwohl die Liste mit "New" geladen wurde.



Noch kurz erklärt wie ich die Liste lade:
Ich habe eine Liste, welche an der Anzahl der Einträge ändern kann. Die 
anzahl der Items habe ich ind die INI-Datei geschrieben. Dabei habe ich 
auch in der INI-Datei unter den Key 1 bis Anzahl Items die Namen der 
Items. So lade ich die Items mit einer For-Schlaufe:

1
        nVersion = CInt(FUN_lngGetPrivateProfileString("operating", "versions", "1", sValue, Len(sValue), Application.StartupPath & "\Settings.ini"))
2

3
        For i As Integer = 1 To nVersion
4
            ListBox.Items.Add(FUN_lngGetPrivateProfileString("operating", i, "", sValue, Len(sValue), Application.StartupPath & "\Settings.ini"))
5
        Next



Beispiel der INI-Datei:
1
[operating]
2
versions=2
3
1=New
4
2=Versuch
5
[select]
6
select=0
#1046989
Lesenswert?

Du hast wohl etwas falsch verstanden.

FUN_lngGetPrivateProfileString() liefert Dir die Länge des gefundenen 
Wertes.
also so verwenden:
nLen = FUN_lngGetPrivateProfileString(...

Der Wert selber steht in sValue, wobei sValue immer maximal lang ist.
Davon musst Du nur die gültigen Zeichen herauslesen:
sValue.Substring(0, nLen)

Ausserdem muss der Schlüssel immer ein String sein, also i.ToString 
statt nur i angeben.

Also:
nLen = CInt(FUN_lngGetPrivateProfileString("operating", "versions", "1", 
_
sValue, Len(sValue), Application.StartupPath & "\Settings.ini"))
nVersion = CInt(sValue.Substring(0, nLen))

Im Loop:
nLen = FUN_lngGetPrivateProfileString("operating", i.ToString, "", _
sValue, Len(sValue), Application.StartupPath & "\Settings.ini")
ListBox.Items.Add(sValue.Substring(0, nLen))

sValue muss so definiert werden:
Dim sValue As String = "                       " 'genügend Platz
#1047764
Lesenswert?

Dex Dexter wrote:

> @900ss D.
> Wenn es möglich ist, wäre ich trotzdem froh um dein Modul.

So ein Mist, es war wohl etwas früh en morgen. Ich habe solch ein Modul 
für C# und nicht für VB.NET. Sorry, dass ich dir da Hoffnung gemacht 
habe.
grummel

Gruß 900ss

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren