Lire et écrire des fichiers INI en C#
-
Qu’est-ce que le fichier
INI
enC#
-
Utilisez
WritePrivateProfileString
pour enregistrer les paramètres nouveaux et modifiés dans un fichier INI enC#
-
Utilisez
ReadPrivateProfileString
pour lire les données d’un fichier INI enC#
-
Lire et écrire des fichiers
INI
enC#
Ce tutoriel apprend à lire et écrire des fichiers INI
en C#.
Qu’est-ce que le fichier INI
en C#
Les fichiers d’initialisation, souvent appelés fichiers INI
, sont des fichiers texte permettant de stocker les informations de configuration du programme. Le framework .NET ne supporte pas nativement les fichiers INI
.
Vous pouvez utiliser les méthodes de l’API Windows à l’aide de Platform Invocation Services pour écrire et lire dans les fichiers. Ce tutoriel va construire une classe représentant les fichiers INI
et les manipuler avec les opérations de l’API Windows.
Pour fonctionner avec les fichiers INI
, nous aurons besoin de deux fonctions de l’API Windows, WritePrivateProfileString
et ReadPrivateProfileString
.
Utilisez WritePrivateProfileString
pour enregistrer les paramètres nouveaux et modifiés dans un fichier INI en C#
Dans un fichier INI
, WritePrivateProfileString
enregistre les paramètres nouveaux et modifiés. La structure est la suivante.
bool WritePrivateProfileString(string name, string key, string value, string filepath);
La fonction renvoie un résultat booléen vrai si l’écriture réussit et faux si l’écriture échoue. Voici les paramètres.
- Le nom de la section à écrire est spécifié par
name
. - Le nom de la clé à définir est spécifié par
key
. - La valeur de la clé est spécifiée par
value
. - Le
filepath
contient l’emplacement du fichierINI
à mettre à jour.
Utilisez ReadPrivateProfileString
pour lire les données d’un fichier INI en C#
ReadPrivateProfileString
lit les données d’un fichier INI
. La fonction lit des valeurs uniques, tous les noms de clé d’une section ou tous les noms de section selon son application.
int GetPrivateProfileString(string name, string key, string default, StringBuilder ReturnedVal,
int maxsize, string filepath);
Le nombre de caractères dans la valeur renvoyée est renvoyé sous la forme d’un entier non signé par la fonction. Voici les paramètres.
- Le nom de la section à lire est spécifié par
name
. Si cette valeur est définie sur null, tous les noms de section seront renvoyés. - Le nom de la clé à lire est spécifié par
key
. La valeur renvoyée inclura les noms des clés dans la section donnée si elle est définie à null et siname
n’est pas null. - Si la clé n’est pas présente,
default
spécifie une valeur par défaut à retourner. ReturnedVal
reçoit une chaîne qui sert de tampon. Le résultat de l’opération est écrit dans le tampon, modifiant la valeur de la chaîne.- La taille maximale de la chaîne qui sera renvoyée dans
ReturnedVal
est spécifiée parmaxsize
. Cela devrait être le même que la taille de la mémoire tampon. Si la valeur lue dans le fichierINI
est supérieure àReturnedVal
, elle sera réduite. - L’emplacement et le nom du fichier
INI
à lire sont spécifiés parfilepath
. Ce fichier doit être présent.
Lire et écrire des fichiers INI
en C#
Créons une classe pour contenir les structures des fonctions de l’API Windows que nous allons utiliser maintenant que nous avons vu leurs structures.
Ajoutez les bibliothèques suivantes.
using System;
using System.IO;
using System.ComponentModel;
using System.Runtime.InteropServices;
using System.Text;
Créez une nouvelle classe nommée ReadWriteINIfile
et utilisez le code de classe suivant. Comme il n’y a pas de modificateur d’accès pour la classe elle-même, elle aura une portée interne.
La classe IniFile
accédera aux fonctions de l’API sans les exposer au public.
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);
}
Nous pouvons maintenant construire la classe ReadWriteINIfile
, nous permettant de lire des fichiers INI
sans connaître les opérations de l’API.
Ajoutez le code suivant à la classe pour créer le constructeur.
public ReadWriteINIfile(string inipath) {
path = inipath;
}
WritePrivateProfileString
est utilisé pour remplir un fichier INI
avec des valeurs. Trois arguments sont utilisés dans le code ci-dessous pour accepter les noms de section et de clé et la valeur à enregistrer.
Dans l’appel à WritePrivateProfileString
, ces valeurs sont combinées avec le nom de fichier passé au constructeur.
public void WriteINI(string name, string key, string value) {
WritePrivateProfileString(name, key, value, this.path);
}
Les arguments de ReadINI
sont le name
et la key
à lire. La première ligne du code ci-dessus définit la chaîne de caractères et fixe sa valeur à plusieurs espaces égaux à sa longueur maximale.
La fonction GetPrivateProfileString
reçoit cette chaîne sous forme de tampon à remplir. Utilisez le code ci-dessous.
public string ReadINI(string name, string key) {
StringBuilder sb = new StringBuilder(255);
int ini = GetPrivateProfileString(name, key, "", sb, 255, this.path);
return sb.ToString();
}
Code source complet :
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