Benutzer mit den meisten Antworten
Get-/WritePrivateProfileString

Frage
-
Hallo Experten,
mit folgenden Code schreibe/lese ich Informationen in/aus eine Datei:
Module Allgemein Private Declare Ansi Function GetPrivateProfileString Lib "kernel32.dll" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Int32, ByVal lpFileName As String) As Int32 Private Declare Ansi Function WritePrivateProfileString Lib "kernel32.dll" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As String, ByVal lpString As String, ByVal lpFileName As String) As Int32 Public Function INI_ReadValueFromFile(ByVal strSection As String, ByVal strKey As String, ByVal strDefault As String, ByVal strFile As String) As String Dim strTemp As String = Space(1024), lLength As Integer lLength = GetPrivateProfileString(strSection, strKey, strDefault, strTemp, strTemp.Length, strFile) Return (strTemp.Substring(0, lLength)) End Function Public Function INI_WriteValueToFile(ByVal strSection As String, ByVal strKey As String, ByVal strValue As String, ByVal strFile As String) As Boolean Return (Not (WritePrivateProfileString(strSection, strKey, strValue, strFile) = 0)) End Function End Module
dabei wird folgende Datei(Auszug, das Original ist ewig lang) erstellt;
[Definition Tags Tree]
[BODY]
BACKCOLOR=Black
FORECOLOR=White
[HTML]
BACKCOLOR=Black
FORECOLOR=White
[HEAD]
BACKCOLOR=Black
FORECOLOR=White
[TITLE]
BACKCOLOR=#A5A5A5
FORECOLOR=White
...
Jetzt meine Frage. Gibt es eine direkte Möglichkeit alle strKey ( das wären die [BODY];[HTML];[HEAD];etc) auszulesen? Mir ist klar, das ich die "Text"-Datei einfach einlesen könnte und nach den Klammern [...] suchen und selektieren könnte. Aber, vielleicht gibt es ja auch eine "richtige" Methode.
Danke vorab ... mfg eem monarch
- Bearbeitet Monarch-Falter Dienstag, 16. Dezember 2014 14:17
Antworten
-
Hi,
ist die INI Datei historisch bedingt? Falls nicht, und falls Du dafür nicht alles mögliche umstellen musst, würde ich die ini wegschmeißen und mit XML arbeiten. Das geht doch erheblich einfacher mittels Serialisierung/Deserialisierung.
Ein Beispiel findest Du hier:
http://www.aspnetzone.de/files/folders/stefanfalz/entry222489.aspxIn deinem Fall würde man bspw. eine Klasse mit den Eigenschaften Key, BackColor und ForeColor erstellen und diese dann in einer List( Of <DeineKlasse> ) halten.
Das lässt sich dann problemlos serialisieren und deserialisieren. D.h. Du musst keine Stringoperationen durchführen, nach Abschnittswerten suchen, Werte suchen, splitten, dem richtigen Schlüssel zuordnen, usw.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Monarch-Falter Mittwoch, 17. Dezember 2014 12:46
Alle Antworten
-
Hallo,
das Einlesen unter .NET dürfte am schnellsten gehen:Dim sections = System.IO.File.ReadLines("PFAD").Where(Function(line) line.StartsWith("[") And line.EndsWith("]")).ToArray()
Auch die von dir verwendeten WinAPI Methoden öffnen bei jedem Zugriff die Datei, bearbeiten sie und schließen sie wieder.
Wenn es bei deiner Datei um Einstellungen geht, solltest du diese in der Einstellungsdatei n(Projekt > Eigenschaften > Einstellungen) anlegen. Eventuell lohnt es sich aber auch ein eigenes Klassenkonstrukt für das Lesen und Schreiben der Datei zu erstellen.Tom Lambert - C# MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets -
Hi,
ist die INI Datei historisch bedingt? Falls nicht, und falls Du dafür nicht alles mögliche umstellen musst, würde ich die ini wegschmeißen und mit XML arbeiten. Das geht doch erheblich einfacher mittels Serialisierung/Deserialisierung.
Ein Beispiel findest Du hier:
http://www.aspnetzone.de/files/folders/stefanfalz/entry222489.aspxIn deinem Fall würde man bspw. eine Klasse mit den Eigenschaften Key, BackColor und ForeColor erstellen und diese dann in einer List( Of <DeineKlasse> ) halten.
Das lässt sich dann problemlos serialisieren und deserialisieren. D.h. Du musst keine Stringoperationen durchführen, nach Abschnittswerten suchen, Werte suchen, splitten, dem richtigen Schlüssel zuordnen, usw.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Monarch-Falter Mittwoch, 17. Dezember 2014 12:46
-
Hi,
ich würde einen neuen Thread aufmachen, da das dann mit der INI Datei nichts mehr zu tun hat.
Freut mich, dass dir die Lösung mittels Serialisierung gefällt :)
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community