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.