¿Cómo puedo guardar la configuración de la aplicación en una aplicación de Windows Forms?
Lo que quiero lograr es muy simple: tengo una aplicación Windows Forms (.NET 3.5) que usa una ruta para leer información. Esta ruta puede ser modificada por el usuario, utilizando el formulario de opciones que proporciono.
Ahora quiero guardar el valor de la ruta en un archivo para usarlo más adelante. Esta sería una de las muchas configuraciones guardadas en este archivo. Este archivo se ubicaría directamente en la carpeta de la aplicación.
Entiendo que hay tres opciones disponibles:
- Archivo de configuración (appname.exe.config)
- Registro
- Archivo XML personalizado
Leí que el archivo de configuración .NET no está previsto para guardar valores en él. En cuanto al registro, me gustaría alejarme lo más posible de él.
¿Significa esto que debo usar un archivo XML personalizado para guardar los ajustes de configuración?
Si es así, me gustaría ver un ejemplo de código de eso (C#).
He visto otras discusiones sobre este tema, pero todavía no me queda claro.
Si trabaja con Visual Studio, es bastante fácil obtener configuraciones persistentes. Haga clic derecho en el proyecto en el Explorador de soluciones y elija Propiedades. Seleccione la pestaña Configuración y haga clic en el hipervínculo si la configuración no existe.
Utilice la pestaña Configuración para crear configuraciones de la aplicación. Visual Studio crea los archivos Settings.settings
que Settings.Designer.settings
contienen la clase singleton Settings
heredada de ApplicationSettingsBase . Puede acceder a esta clase desde su código para leer/escribir la configuración de la aplicación:
Properties.Settings.Default["SomeProperty"] = "Some Value";
Properties.Settings.Default.Save(); // Saves settings in application configuration file
Esta técnica es aplicable tanto para consola, Windows Forms y otros tipos de proyectos.
Tenga en cuenta que debe establecer la propiedad de alcance de su configuración. Si selecciona Ámbito de aplicación, entonces Settings.Default.<su propiedad> será de solo lectura.
Referencia: Cómo: escribir configuraciones de usuario en tiempo de ejecución con C# - Microsoft Docs
Si planea guardar en un archivo dentro del mismo directorio que su ejecutable, aquí tiene una buena solución que utiliza el formato JSON :
using System;
using System.IO;
using System.Web.Script.Serialization;
namespace MiscConsole
{
class Program
{
static void Main(string[] args)
{
MySettings settings = MySettings.Load();
Console.WriteLine("Current value of 'myInteger': " + settings.myInteger);
Console.WriteLine("Incrementing 'myInteger'...");
settings.myInteger++;
Console.WriteLine("Saving settings...");
settings.Save();
Console.WriteLine("Done.");
Console.ReadKey();
}
class MySettings : AppSettings<MySettings>
{
public string myString = "Hello World";
public int myInteger = 1;
}
}
public class AppSettings<T> where T : new()
{
private const string DEFAULT_FILENAME = "settings.json";
public void Save(string fileName = DEFAULT_FILENAME)
{
File.WriteAllText(fileName, (new JavaScriptSerializer()).Serialize(this));
}
public static void Save(T pSettings, string fileName = DEFAULT_FILENAME)
{
File.WriteAllText(fileName, (new JavaScriptSerializer()).Serialize(pSettings));
}
public static T Load(string fileName = DEFAULT_FILENAME)
{
T t = new T();
if(File.Exists(fileName))
t = (new JavaScriptSerializer()).Deserialize<T>(File.ReadAllText(fileName));
return t;
}
}
}