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!
Wenn Du bis Samstag warten kannst, dann kann ich dir ein Modul geben. Komme gerade nicht daran. Gruß 900ss
Das wäre sehr nett. Kann ohne Problem bis Samstag warten. Vielen Dank schon im voraus! Gruss Dexter
Wenn Du in VB.Net auch Systemfunktionen aus der Win32-API aufrufen kannst, dann kannst Du mit den Win32-API-Funktionen ReadPrivateProfileString und ReadPrivateProfileInt lesend auf *.INI-Dateien zugreifen.
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
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(...))
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.
> 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 |
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
Jetzt macht das ganze langsam Sinn :D Vielen Dank für eure Hilfe. Momentan habe ich den Durchblick. Melde mich wieder wenn ich anstehe... @900ss D. Wenn es möglich ist, wäre ich trotzdem froh um dein Modul.
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
> Sorry, dass ich dir da Hoffnung gemacht > habe. Halb so schlimm! Habe ja jetzt eine Möglichkeit, die funktioniert! ;) nochmals vielen Dank an alle! Gruss Dexter
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.