Cómo leer y escribir en un fichero INI usando el lenguaje de programación C# (C Sharp), con el IDE Microsoft Visual Studio Community 2019. Desarrollamos una aplicación completa en C#, con formulario (ventana) para Windows que permite leer un valor de un INI, o bien escribir un valor en un INI.
- Ficheros INI, requisitos para leer ficheros INI con Visual Studio .NET C#.
- Nuevo proyecto y formulario en Microsoft Visual Studio Community 2019.
- Crear clase con procedimientos para Leer y Escribir en ficheros INI.
- Código fuente en C# completo para el formulario anterior.
- Descarga de la aplicación de ejemplo completa ProyectoA Leer Escribir INI en C#.
Ficheros INI, requisitos para leer ficheros INI con Visual Studio .NET C#
Un fichero INI tiene la siguiente estructura:
1 2 3 4 5 6 7 8 |
[Sección1] clave1=valor1 clave2=valor2 ... [Sección2] clave1=valor1 clave2=valor2 ... |
Básicamente consta de una o varias secciones, que se identifican con corchetes y dentro de cada sección una o varias claves con su valor.
Un ejemplo de fichero INI:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
[Log] Guardar en fichero=1 [Configuración] Enviar E-Mail=0 Ping=0 Ejecutar minimizada=0 [Servidor de IPs] Hacer este PC servidor de IPs=0 Obtener IP - IP= Obtener IP - Puerto=8887 [Cliente BD] Servidor=proyectoa.com Puerto=3306 Usuario conexión=usuavisoip [Ejecutar fichero] Fichero=C:\Archivos de programa\Radmin Viewer 3\Radmin.exe Parámetros=/connect:<<<IP>>>:4899 /2bpp Abrir al iniciar=1 [Ping] Puerto=9988 Texto a enviar=Recepción de ping correcta Puerto Envío=9988 |
Estos ficheros están en desuso, han sido «sustituidos» por ficheros de tipo XML. Aunque muchas aplicaciones siguen usándolos por su sencillez. Principalmente se usan para guardar valores de configuración de una aplicación, como en el ejemplo anterior.
Lenguajes de programación como Borland Delphi, incluyen sus propias unidades (clases, librerías) para la lectura y escritura en estos ficheros INI, pero Visual Studio .Net C# no las incluye, directamente, dado que como decimos se trata de ficheros en desuso.
El único requisito para poder leer y escribir ficheros INI con C# es disponer del IDE de desarrollo Microsoft Visual Studio Community 2019 (o cualquier otra versión o IDE que soporte C#).
Nuevo proyecto y formulario en Microsoft Visual Studio Community 2019
En primer lugar crearemos un nuevo proyecto en Microsoft Visual Studio Community 2019, en nuestro caso de tipo «Aplicación Windows Forms (.NET Framework):
Estableceremos el nombre de la solución, por ejemplo «Proyecto_LeerEscribirINI» y la carpeta donde se crearán todos sus ficheros:
Agregaremos los siguientes componentes para crear una aplicación de ejemplo que lee valores de un fichero INI, pasándole el fichero INI, la sección y la clave. Y también guardará valores en fichero INI, pasándole el fichero INI, la sección, la clave y el valor:
Crear clase con procedimientos para Leer y Escribir en ficheros INI
Desde nuestro proyecto, en el Explorador de soluciones, pulsaremos con el botón derecho y elegiremos «Agregar» – «Clase»:
Elegiremos «Clase» y en «Nombre» introduciremos «INI.cs»:
Agregaremos el siguiente código C# para la clase INI:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
using System.Runtime.InteropServices; using System.Text; namespace ProyectoALeerEscribirINI { public class INI { public string ficheroINI { get; private set; } [DllImport("kernel32")] private static extern long WritePrivateProfileString(string section, 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 INI(string INIPath) { ficheroINI = INIPath; } public void EscribirINI(string Seccion, string Clave, string Valor) { WritePrivateProfileString(Seccion, Clave, Valor, this.ficheroINI); } public string LeerINI(string Seccion, string Clave) { StringBuilder temp = new StringBuilder(255); int i = GetPrivateProfileString(Seccion, Clave, "", temp, 255, this.ficheroINI); return temp.ToString(); } } } |
Código fuente en C# completo para el formulario anterior
El código fuente completo de la ventana que hemos creado anteriormente, que contiene todos los botones para seleccionar ficheros INI, para escribir un valor en una sección y clave de un INI y para leer un valor de una sección y clave de un INI, es el siguiente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
using System; using System.IO; using System.Windows.Forms; namespace ProyectoALeerEscribirINI { public partial class formPrincipal : Form { public formPrincipal() { InitializeComponent(); } private void btEscribir_Click(object sender, EventArgs e) { //INI ficheroINI = new INI(Application.StartupPath + // Path.DirectorySeparatorChar + "hola.ini"); if (txtFicheroINI.Text != "") { INI ficheroINI = new INI(txtFicheroINI.Text); ficheroINI.EscribirINI(txtEscribirINISeccion.Text, txtEscribirINIClave.Text, txtEscribirINIValor.Text); } else MessageBox.Show("No ha elegido un fichero INI para guardar los valores.", "Guardar en fichero INI...", MessageBoxButtons.OK, MessageBoxIcon.Warning); } private void btLeerINI_Click(object sender, EventArgs e) { string rutaFicheroINI = txtFicheroINI.Text; if (File.Exists(rutaFicheroINI)) { INI fINI = new INI(rutaFicheroINI); txtLeerINIValor.Text = fINI.LeerINI(txtLeerINISeccion.Text, txtLeerINIClave.Text); } else MessageBox.Show("No se ha encontrado el fichero INI seleccionado.", "Leer fichero INI...", MessageBoxButtons.OK, MessageBoxIcon.Warning); } private void btSeleccionarINI_Click(object sender, EventArgs e) { OpenFileDialog dialogiAbrirFichero = new OpenFileDialog(); dialogiAbrirFichero.InitialDirectory = Application.StartupPath; dialogiAbrirFichero.Filter = "Ficheros INI (*.ini)|*.ini|Todos los ficheros (*.*)|*.*"; dialogiAbrirFichero.FilterIndex = 1; dialogiAbrirFichero.RestoreDirectory = true; dialogiAbrirFichero.CheckFileExists = false; if (dialogiAbrirFichero.ShowDialog() == DialogResult.OK) txtFicheroINI.Text = dialogiAbrirFichero.FileName; } } } |
La aplicación ProyectoA Leer Escribir INI en funcionamiento
Compilaremos la aplicación para realizar pruebas, elegiremos un fichero INI (si es para escribir puede que no exista, en cuyo caso se creará). Por ejemplo, elegiremos el fichero ini «fichero_ini_ejemplo.ini» en la carpeta de la aplicación, en principio no existe. Introduciremos la Sección que se creará (si no existe), por ejemplo «Servidor de conexión», introduciremos la Clave, por ejemplo «host» y el valor de esta clave, por ejemplo «proyectoa.com». Pulsaremos «Escribir»:
Comprobaremos que se ha creado un fichero llamado «fichero_ini_ejemplo.ini» y que contiene, al menos, la sección, clave y valor introducidos:
El formato INI con el que se guardarán los datos anteriores:
1 2 |
[Servidor de conexión] host=proyectoa.com |
También podremos comprobar el proceso «inverso», leer un valor de una sección y clave. Para ello introduciremos la sección y la clave en «Leer INI» y pulsaremos «Leer», si la clave existe en la sección indicadas obtendrá su valor:
Descarga de la aplicación de ejemplo completa ProyectoA Leer Escribir INI en C#
En el siguiente enlace dejamos disponible la descarga de la aplicación completa en C# que lee y escribe en ficheros INI: