VB.NET Daten aus Ini-Datei auslesen

Hallo zusammen,
ich möchte gerne Daten aus einer Ini-Datei auslesen.
In VB6.0 ging das ja recht simpel mit den da vorhandenen APIs
( u.a. GetPrivateProfileString ).
Nun habe ich mich an VB.NET rangewagt und brauche diese Funktionalität ebenfalls, jedoch finde ich nichts passendes.

Bsp.:
[Allgemein]
Zeit=18:15:09

Hier brauche ich den Eintrag „18:15:09“

Ich habe es unter VB.NET auch schon mit dem „StreamReader“ versucht,
jedoch nicht geschafft einen bestimmten Eintrag zu extrahieren.

Vielen Dank für jede Hilfe

Gruß

Oleg R.

P.S.: Gibt es irgendwo im Netz eine Übersicht (in der man nach Klassen suchen kann) die das Namespace der jeweiligen Klasse anzeigt ?

Hallo!

Das .NET Framework (1.0, 1.1 und ich bin mir ziemlich sicher auch 2.0) bringt leider keine Klassen mit, die mit ini-Dateien hantieren.
Entweder Du schreibst Dir eine eigene Klasse (ist nicht so schwer, außerdem gibt’s unter http://msdn.microsoft.com/library/en-us/dndotnet/htm… einen Artikel von Ralph Westphal dazu), suchst im Netz nach fertigen IniFile-Klassen (gibt’s bestimmt irgendwo) oder Du verwendest GetPrivateProfileString() per P/Invoke.

Für die Speicherung der Daten als XML bietet .NET ja eine ganze Menge an Möglichkeiten, sinnvollerweise überlegst Du Dir vielleicht auch, von ini-Dateien auf XML umzusteigen, wenn es geht.

Die Info, in welchem Namespace (und in welcher Assembly) eine Klasse enthalten ist, findest Du jeweils in der Dokumentation zur .NET Klassenbibliothek, z.B. unter http://msdn.microsoft.com/library/default.asp?url=/l…

Gruß,
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Danke schonmal für die schnelle Antwort,
leider bin ich an die ini Dateien gebunden und kann nicht auf Xml wechseln. Werde noch weiter im Netz suchen und ggf. eine eigene Klasse schreiben, wenn ich nichts finden sollte.
Gruß
Oleg R.

Wenn’s schnell gehen muss, dann kann ich eigentlich nur die Verwendung von GetPrivateProfileString() per P/Invoke empfehlen.
So wird’s deklariert:

 \_
Private Shared Function GetPrivateProfileString(ByVal lpAppName As String, \_
 ByVal lpKeyName As String, \_
 ByVal lpDefault As String, \_
 ByVal lpReturnedString As StringBuilder, \_
 ByVal nSize As Integer, \_
 ByVal lpFileName As String) As Integer
End Function

und so aufgerufen:

Dim res As Integer
Dim sb As StringBuilder
 
sb = New StringBuilder(255)
res = GetPrivateProfileString("Section", "Key", "", sb, sb.Capacity, "c:\sample.ini")

Gruß,
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Wenn’s schnell gehen muss, dann kann ich eigentlich nur die
Verwendung von GetPrivateProfileString() per P/Invoke
empfehlen.
So wird’s deklariert:

_
Private Shared Function GetPrivateProfileString(ByVal
lpAppName As String, _
ByVal lpKeyName As String, _
ByVal lpDefault As String, _
ByVal lpReturnedString As StringBuilder, _
ByVal nSize As Integer, _
ByVal lpFileName As String) As Integer
End Function

und so aufgerufen:

Dim res As Integer

Hallo nochmal,
habe das mit dem P/Invoke versucht, allerdings klappt die Deklaration nicht richtig.
„Statement is not in a valid namespace“

Welches Namespace brauche ich denn dafür ?

Danke
Oleg R.

Für das DllImportAttribute brauchst du System.Runtime.Interop und für den StringBuilder System.Text.
Kann man u.a. bei MSDN nachlesen.

Gruß,
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Und ich nochmal,
irgendwie bekomme ich das nicht hin. Bin hier am hin und herbasteln, aber im Code taucht immer wieder ein Fehler auf.
Ich habe unten mal meinen Code reingeschrieben, wobei der
DLL-Import folgenden Fehler anzeigt und ich ihn nicht wegbekomme:
„Die Anwendung ist in einem Namespace ungültig.“
Als Namespace gab es zudem nur Interopservices.

CODE:

Imports System.Text
Imports System.Runtime.InteropServices

_
Private Shared Function GetPrivateProfileString(ByVal lpAppName As String, _
ByVal lpKeyName As String, _
ByVal lpDefault As String, _
ByVal lpReturnedString As StringBuilder, _
ByVal nSize As Integer, _
ByVal lpFileName As String) As Integer
End Function

Public Class Form1
Inherits System.Windows.Forms.Form

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim res As Integer
Dim sb As StringBuilder

sb = New StringBuilder(255)
res = GetPrivateProfileString(„Section“, „Key“, „“, sb, sb.Capacity, „c:\sample.ini“)
End Sub
End Class

Gruß
Oleg R.

„Die ANWEISUNG ist in einem Namespace ungültig.“

hatte mich verschrieben.

Ganz einfach (dazu muss man aber einmal verstanden haben, wie P/Invoke funktioniert): Das DllImport muss innerhalb einer Klasse sein.
Damit definiertst Du Dir schlichtweg eine Methode der Klasse, deren Implementierung nicht in der Klasse steht, sondern in der angegebenen Funktion der DLL.

Das mit den InteropServices passt schon, da ist DllImportAttribute definiert.

Guckst Du: http://msdn.microsoft.com/library/default.asp?url=/l…
Oder ein Tutorial zum Platform Invoke generell:
http://msdn.microsoft.com/library/default.asp?url=/l…

Gruß,
Martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Alles klar, habe es heute geschafft ein wenig weiterzuprogrammieren und jetzt geht es. Werde mich später mal an eine eigene Klasse wagen, um dieses Problem zu lösen. Wäre auch ne gute Übung.
Vielen Dank nochmal
gruß
Oleg R.