¿Cómo puedo guardar la configuración de la aplicación en una aplicación de Windows Forms?

Resuelto Fueled asked hace 15 años • 14 respuestas

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.

Fueled avatar Jan 17 '09 18:01 Fueled
Aceptado

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.settingsque Settings.Designer.settingscontienen la clase singleton Settingsheredada 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

aku avatar Jan 17 '2009 12:01 aku

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;
        }
    }
}
Trevor avatar Jun 30 '2011 22:06 Trevor