Saltar al contenido

Leer/escribir un archivo INI

Deseamos compartirte la mejor información que hallamos en línea. Esperamos que te sirva de ayuda y si quieres comentarnos algo que nos pueda ayudar a crecer hazlo con libertad.

Solución:

Prefacio

En primer lugar, lea esta publicación de blog de MSDN sobre las limitaciones de los archivos INI. Si se adapta a tus necesidades, sigue leyendo.

Esta es una implementación concisa que escribí, utilizando el Windows P/Invoke original, por lo que es compatible con todas las versiones de Windows con .NET instalado (es decir, Windows 98 – Windows 10). Por la presente, lo libero al dominio público: puede usarlo comercialmente sin atribución.

la clase diminuta

Agregar una nueva clase llamada IniFile.cs a su proyecto:

using System.IO;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Text;

// Change this to match your program's normal namespace
namespace MyProg

    class IniFile   // revision 11
    
        string Path;
        string EXE = Assembly.GetExecutingAssembly().GetName().Name;

        [DllImport("kernel32", CharSet = CharSet.Unicode)]
        static extern long WritePrivateProfileString(string Section, string Key, string Value, string FilePath);

        [DllImport("kernel32", CharSet = CharSet.Unicode)]
        static extern int GetPrivateProfileString(string Section, string Key, string Default, StringBuilder RetVal, int Size, string FilePath);

        public IniFile(string IniPath = null)
        
            Path = new FileInfo(IniPath ?? EXE + ".ini").FullName;
        

        public string Read(string Key, string Section = null)
        
            var RetVal = new StringBuilder(255);
            GetPrivateProfileString(Section ?? EXE, Key, "", RetVal, 255, Path);
            return RetVal.ToString();
        

        public void Write(string Key, string Value, string Section = null)
        
            WritePrivateProfileString(Section ?? EXE, Key, Value, Path);
        

        public void DeleteKey(string Key, string Section = null)
        
            Write(Key, null, Section ?? EXE);
        

        public void DeleteSection(string Section = null)
        
            Write(null, null, Section ?? EXE);
        

        public bool KeyExists(string Key, string Section = null)
        
            return Read(Key, Section).Length > 0;
        
    

Cómo usarlo

Abra el archivo INI de una de las 3 formas siguientes:

// Creates or loads an INI file in the same directory as your executable
// named EXE.ini (where EXE is the name of your executable)
var MyIni = new IniFile();

// Or specify a specific name in the current dir
var MyIni = new IniFile("Settings.ini");

// Or specify a specific name in a specific dir
var MyIni = new IniFile(@"C:Settings.ini");

Puedes escribir algunos valores así:

MyIni.Write("DefaultVolume", "100");
MyIni.Write("HomePage", "http://www.google.com");

Para crear un archivo como este:

[MyProg]
DefaultVolume=100
HomePage=http://www.google.com

Para leer los valores del archivo INI:

var DefaultVolume = MyIni.Read("DefaultVolume");
var HomePage = MyIni.Read("HomePage");

Opcionalmente, puede establecer [Section]‘s:

MyIni.Write("DefaultVolume", "100", "Audio");
MyIni.Write("HomePage", "http://www.google.com", "Web");

Para crear un archivo como este:

[Audio]
DefaultVolume=100

[Web]
HomePage=http://www.google.com

También puede comprobar la existencia de un key al igual que:

if(!MyIni.KeyExists("DefaultVolume", "Audio"))

    MyIni.Write("DefaultVolume", "100", "Audio");

Puede eliminar un key al igual que:

MyIni.DeleteKey("DefaultVolume", "Audio");

También puede eliminar una sección completa (incluidos todos keys) al igual que:

MyIni.DeleteSection("Web");

Por favor, siéntase libre de comentar con cualquier mejora!

Los creadores del marco .NET quieren que use archivos de configuración basados ​​en XML, en lugar de archivos INI. Entonces no, no hay un mecanismo incorporado para leerlos.

Sin embargo, hay soluciones de terceros disponibles.

  • Los controladores INI se pueden obtener como paquetes NuGet, como INI Parser.
  • Puede escribir su propio controlador INI, que es la forma laboriosa de la vieja escuela. Le da más control sobre la implementación, que puede usar para bien o para mal. Ver, por ejemplo, una clase de manejo de archivos INI usando C#, P/Invoke y Win32.

Este artículo sobre CodeProject “Una clase de manejo de archivos INI usando C#” debería ayudar.

El autor creó una clase de C# “Ini” que expone dos funciones de KERNEL32.dll. Estas funciones son: WritePrivateProfileString y GetPrivateProfileString. Necesitará dos espacios de nombres: System.Runtime.InteropServices y System.Text.

Pasos para usar la clase Ini

En la definición de espacio de nombres de su proyecto, agregue

using INI;

Crear un INIFile como este

INIFile ini = new INIFile("C:\test.ini");

Utilizar IniWriteValue para escribir un nuevo valor a un específico key en una sección o uso IniReadValue para leer un valor DESDE un key en una Sección específica.

Nota: si estás empezando desde cero, puedes leer esto artículo de MSDN: Cómo: agregar archivos de configuración de aplicaciones a proyectos de C#. Es una mejor manera de configurar su aplicación.

Aquí tienes las comentarios y puntuaciones

Al final de todo puedes encontrar las observaciones de otros usuarios, tú igualmente puedes insertar el tuyo si te apetece.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *