Lesen und Schreiben von INI-Dateien in C#
-
Was ist die
INI
-Datei inC#
-
Verwenden Sie
WritePrivateProfileString
, um neue und geänderte Einstellungen in einer INI-Datei inC#
zu speichern -
Verwendung von
ReadPrivateProfileString
zum Lesen von Daten aus einer INI-Datei inC#
-
Lesen und Schreiben von
INI
-Dateien inC#
Dieses Tutorial lehrt das Lesen und Schreiben von INI
-Dateien in C#.
Was ist die INI
-Datei in C#
Initialisierungsdateien, oft auch INI
-Dateien genannt, sind Textdateien zum Speichern von Programmkonfigurationsinformationen. Das .NET-Framework unterstützt nativ keine INI
-Dateien.
Sie können Windows-API-Methoden verwenden, die Plattformaufrufdienste verwenden, um in die Dateien zu schreiben und daraus zu lesen. Dieses Tutorial erstellt eine Klasse, die INI
-Dateien darstellt, und manipuliert sie mit Windows-API-Operationen.
Um mit INI
-Dateien arbeiten zu können, benötigen wir zwei Windows-API-Funktionen, WritePrivateProfileString
und ReadPrivateProfileString
.
Verwenden Sie WritePrivateProfileString
, um neue und geänderte Einstellungen in einer INI-Datei in C#
zu speichern
In einer INI
-Datei speichert WritePrivateProfileString
neue und geänderte Einstellungen. Die Struktur ist wie folgt.
bool WritePrivateProfileString(string name, string key, string value, string filepath);
Die Funktion gibt ein boolesches Ergebnis wahr zurück, wenn das Schreiben erfolgreich ist, und falsch, wenn das Schreiben fehlschlägt. Das Folgende sind die Parameter.
- Der Name des zu schreibenden Abschnitts wird durch
name
angegeben. - Der Name des zu setzenden Schlüssels wird mit
key
angegeben. - Der Wert für den Schlüssel wird durch
value
angegeben. - Der
Dateipfad
enthält den Speicherort der zu aktualisierendenINI
-Datei.
Verwendung von ReadPrivateProfileString
zum Lesen von Daten aus einer INI-Datei in C#
ReadPrivateProfileString
liest Daten aus einer INI
-Datei. Die Funktion liest je nach Anwendung einzelne Werte, alle Schlüsselnamen aus einem Abschnitt oder alle Abschnittsnamen.
int GetPrivateProfileString(string name, string key, string default, StringBuilder ReturnedVal,
int maxsize, string filepath);
Die Anzahl der Zeichen im zurückgegebenen Wert wird von der Funktion als Ganzzahl ohne Vorzeichen zurückgegeben. Das Folgende sind die Parameter.
- Der Name des auszulesenden Abschnitts wird mit
name
angegeben. Wenn dies auf null gesetzt ist, werden alle Abschnittsnamen zurückgegeben. - Mit
key
wird der Name des auszulesenden Schlüssels angegeben. Der zurückgegebene Wert enthält die Namen der Schlüssel im angegebenen Abschnitt, wenn er auf null gesetzt ist, während dername
nicht null ist. - Wenn der Schlüssel nicht vorhanden ist, gibt
default
einen Standardwert an, der zurückgegeben werden soll. ReturnedVal
erhält einen String, der als Puffer dient. Das Ergebnis der Operation wird in den Puffer geschrieben, wodurch der Wert der Zeichenfolge geändert wird.- Die maximale Größe des Strings, der in
ReturnedVal
zurückgegeben wird, wird durchmaxsize
angegeben. Diese sollte der Puffergröße entsprechen. Ist der aus derINI
-Datei gelesene Wert länger alsReturnedVal
, wird er gekürzt. - Mit
filepath
werden Ort und Name der auszulesendenINI
-Datei angegeben. Diese Datei muss vorhanden sein.
Lesen und Schreiben von INI
-Dateien in C#
Lassen Sie uns eine Klasse erstellen, die die Strukturen der Windows-API-Funktionen enthält, die wir verwenden werden, nachdem wir ihre Strukturen gesehen haben.
Fügen Sie die folgenden Bibliotheken hinzu.
using System;
using System.IO;
using System.ComponentModel;
using System.Runtime.InteropServices;
using System.Text;
Erstellen Sie eine neue Klasse namens ReadWriteINIfile
und verwenden Sie den folgenden Klassencode. Da es für die Klasse selbst keinen Zugriffsmodifikator gibt, hat sie einen internen Geltungsbereich.
Die Klasse IniFile
greift auf die API-Funktionen zu, ohne sie der Öffentlichkeit zugänglich zu machen.
public class ReadWriteINIfile {
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string name, string key, string val,
string filePath);
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string def,
StringBuilder retVal, int size,
string filePath);
}
Wir können jetzt die Klasse ReadWriteINIfile
konstruieren, die es uns ermöglicht, INI
-Dateien zu lesen, ohne die API-Operationen zu kennen.
Fügen Sie der Klasse den folgenden Code hinzu, um den Konstruktor zu erstellen.
public ReadWriteINIfile(string inipath) {
path = inipath;
}
WritePrivateProfileString
wird verwendet, um eine INI
-Datei mit Werten zu füllen. Im folgenden Code werden drei Argumente verwendet, um die Abschnitts- und Schlüsselnamen sowie den zu speichernden Wert zu akzeptieren.
Beim Aufruf von WritePrivateProfileString
werden diese Werte mit dem an den Konstruktor übergebenen Dateinamen kombiniert.
public void WriteINI(string name, string key, string value) {
WritePrivateProfileString(name, key, value, this.path);
}
Die Argumente für ReadINI
sind der zu lesende name
und key
. Die erste Zeile des obigen Codes definiert die Zeichenfolge und setzt ihren Wert auf mehrere Leerzeichen, die ihrer maximalen Länge entsprechen.
Die Funktion GetPrivateProfileString
erhält diesen String als zu füllenden Puffer. Verwenden Sie den folgenden Code.
public string ReadINI(string name, string key) {
StringBuilder sb = new StringBuilder(255);
int ini = GetPrivateProfileString(name, key, "", sb, 255, this.path);
return sb.ToString();
}
Vollständiger Quellcode:
using System;
using System.IO;
using System.ComponentModel;
using System.Runtime.InteropServices;
using System.Text;
namespace Test {
class Program {
static void Main(string[] args) {}
}
public class ReadWriteINIfile {
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string name, string key, string val,
string filePath);
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string def,
StringBuilder retVal, int size,
string filePath);
public string path;
public ReadWriteINIfile(string inipath) {
path = inipath;
}
public void WriteINI(string name, string key, string value) {
WritePrivateProfileString(name, key, value, this.path);
}
public string ReadINI(string name, string key) {
StringBuilder sb = new StringBuilder(255);
int ini = GetPrivateProfileString(name, key, "", sb, 255, this.path);
return sb.ToString();
}
}
}
I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.
LinkedIn