Leer y escribir archivos INI en C#
-
¿Qué es el archivo
INI
enC#
? -
Use
WritePrivateProfileString
para guardar configuraciones nuevas y modificadas en un archivo INI enC#
-
Utilice
ReadPrivateProfileString
para leer datos de un archivo INI enC#
-
Leer y escribir archivos
INI
enC#
Este tutorial enseña a leer y escribir archivos INI
en C#.
¿Qué es el archivo INI
en C#
?
Los archivos de inicialización, a menudo llamados archivos INI
, son archivos de texto para almacenar información de configuración del programa. El marco .NET no admite archivos INI
de forma nativa.
Puede utilizar los métodos de la API de Windows mediante los servicios de invocación de plataforma para escribir en los archivos y leerlos. Este tutorial construirá una clase que representa los archivos INI
y los manipulará con las operaciones de la API de Windows.
Para operar con archivos INI
, necesitaremos dos funciones de la API de Windows, WritePrivateProfileString
y ReadPrivateProfileString
.
Use WritePrivateProfileString
para guardar configuraciones nuevas y modificadas en un archivo INI en C#
En un archivo INI
, WritePrivateProfileString
guarda configuraciones nuevas y modificadas. La estructura es la siguiente.
bool WritePrivateProfileString(string name, string key, string value, string filepath);
La función devuelve un resultado booleano de verdadero si la escritura tiene éxito y falso si la escritura falla. Los siguientes son los parámetros.
- El nombre de la sección a escribir se especifica con
name
. - El nombre de la clave que se establecerá se especifica mediante
key
. - El valor de la clave se especifica mediante
value
. - La
ruta del archivo
contiene la ubicación del archivoINI
que se actualizará.
Utilice ReadPrivateProfileString
para leer datos de un archivo INI en C#
ReadPrivateProfileString
lee datos de un archivo INI
. La función lee valores individuales, todos los nombres clave de una sección o todos los nombres de sección según su aplicación.
int GetPrivateProfileString(string name, string key, string default, StringBuilder ReturnedVal,
int maxsize, string filepath);
La función devuelve el número de caracteres en el valor devuelto como un entero sin signo. Los siguientes son los parámetros.
- El nombre de la sección a leer se especifica con
name
. Si se establece en nulo, se devolverán todos los nombres de sección. - El nombre de la clave a leer se especifica con
key
. El valor devuelto incluirá los nombres de las claves en la sección dada si se establece en nulo mientras que elname
no es nulo. - Si la clave no está presente,
default
especifica un valor predeterminado para devolver. ReturnedVal
recibe una cadena que sirve como búfer. El resultado de la operación se escribe en el búfer, modificando el valor de la cadena.- El tamaño máximo de la cadena que se devolverá en
ReturnedVal
se especifica mediantemaxsize
. Este debe ser el mismo que el tamaño del búfer. Si el valor leído del archivoINI
es mayor queReturnedVal
, se reducirá. - La ubicación y el nombre del archivo
INI
que se va a leer se especifican mediantefilepath
. Este archivo tiene que estar presente.
Leer y escribir archivos INI
en C#
Hagamos una clase para contener las estructuras de las funciones de la API de Windows que usaremos ahora que hemos visto sus estructuras.
Agregue las siguientes bibliotecas.
using System;
using System.IO;
using System.ComponentModel;
using System.Runtime.InteropServices;
using System.Text;
Cree una nueva clase llamada ReadWriteINIfile
y use el siguiente código de clase. Debido a que no hay un modificador de acceso para la clase en sí, tendrá un alcance interno.
La clase IniFile
accederá a las funciones de la API sin exponerlas al público.
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);
}
Ahora podemos construir la clase ReadWriteINIfile
, que nos permite leer archivos INI
sin conocer las operaciones de la API.
Agregue el siguiente código a la clase para crear el constructor.
public ReadWriteINIfile(string inipath) {
path = inipath;
}
WritePrivateProfileString
se usa para llenar un archivo INI
con valores. Se utilizan tres argumentos en el código siguiente para aceptar los nombres de sección y clave y el valor que se va a guardar.
En la llamada a WritePrivateProfileString
, estos valores se combinan con el nombre de archivo pasado al constructor.
public void WriteINI(string name, string key, string value) {
WritePrivateProfileString(name, key, value, this.path);
}
Los argumentos de ReadINI
son el name
y la key
para leer. La primera línea del código anterior define la cadena y establece su valor en varios espacios iguales a su longitud máxima.
La función GetPrivateProfileString
recibe esta cadena como un búfer para ser poblada. Utilice el código de abajo.
public string ReadINI(string name, string key) {
StringBuilder sb = new StringBuilder(255);
int ini = GetPrivateProfileString(name, key, "", sb, 255, this.path);
return sb.ToString();
}
Código fuente completo:
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