read - write xml c#
El más simple par de pares clave/valor analizados en.NET (5)
Mi proyecto requiere un archivo donde almaceno datos clave / valor de par que el usuario debe poder leer y modificar. Quiero que el programa espere que las claves estén allí, y quiero analizarlas del archivo lo más rápido posible.
Podría almacenarlos en XML, pero XML es complejo, y requeriría nodos de cruce, nodos secundarios y demás, todo lo que quiero es una clase que tome un archivo y genere pares clave de valor. Quiero el menor manejo de errores posible, y quiero que se haga con el menor código posible.
Podría codificar una clase así yo mismo, pero preferiría aprender cómo no está en el marco que inventar la rueda dos veces. ¿Hay alguna clase de magia incorporada en .NET (3.5) que pueda hacerlo?
MagicClass kv = new MagicClass("Settings.ini"); // It doesn''t neccesarily have to be an INI file, it can be any simple key/value pair format.
string Value1 = kv.get("Key1");
...
No sé de ninguna clase incorporada para analizar el archivo ini. He usado nini cuando es necesario para hacerlo. Está licenciado bajo la licencia MIT / X11, por lo que no tiene ningún problema para ser incluido en un programa de código cerrado.
Es muy útil. Entonces, si tiene un archivo Settings.ini formateado de esta manera:
[Configuration]
Name = Jb Evain
Phone = +330101010101
Usarlo sería tan simple como:
var source = new IniConfigSource ("Settings.ini");
var config = source.Configs ["Configuration"];
string name = config.Get ("Name");
string phone = config.Get ("Phone");
Use la clase KeyValuePair para Key y Value, luego simplemente serialice una lista en el disco con un XMLSerializer .
Ese sería el enfoque más simple que siento. No tendrías que preocuparte por atravesar nodos. Llamar a la función Deserializar lo hará por usted. El usuario podría editar los valores en el archivo si así lo desea.
si desea que el usuario pueda leer y modificar el archivo, le sugiero un par delimitado por comas, uno por línea
key1,value1
key2,value2
...
El análisis es simple: lea el archivo, divídalo en línea nueva o coma, luego tome los elementos de dos en dos
Formatee el archivo de esta manera:
key1=value1
key2=value2
Lea el archivo completo en una cadena (hay una función simple que lo hace, tal vez en la clase de archivo o cadena), y llame a string.Split (''=''). Asegúrese de llamar también a string.Trim () en cada tecla y valor a medida que recorre la lista y meta cada par en una tabla hash o diccionario.
Si está buscando una función fácil y rápida, no desea utilizar la aplicación .Net configuración del usuario configuración de archivos o preocuparse por problemas de serialización que a veces ocurren en el tiempo.
La siguiente función estática puede cargar un archivo formateado como "KEY = VALUE".
public static Dictionary<String, String> LoadConfig(string settingfile)
{
var dic = new Dictionary<String, String>();
if (File.Exists(settingfile))
{
var settingdata = File.ReadAllLines(settingfile);
for (var i = 0; i < settingdata.Length; i++)
{
var setting = settingdata[i];
var sidx = setting.IndexOf("=");
if (sidx >= 0)
{
var skey = setting.Substring(0, sidx);
var svalue = setting.Substring(sidx+1);
if (!dic.ContainsKey(skey))
{
dic.Add(skey, svalue);
}
}
}
}
return dic;
}
Nota: Estoy usando un diccionario para que las claves sean únicas, que generalmente es el caso con la configuración.
USO:
var settingfile = AssemblyDirectory + "//mycustom.setting";
var settingdata = LoadConfig(settingfile);
if (settingdata.ContainsKey("lastrundate"))
{
DateTime lout;
String svalue;
if (settingdata.TryGetValue("lastrundate", out svalue))
{
DateTime.TryParse(svalue, out lout);
lastrun = lout;
}
}