using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System; using System.IO; using System.Text.Json; namespace CtrEditor { internal class EstadoPersistente { // Ruta donde se guardará el estado private static readonly string _filePath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "estado.json"); // Instancia privada estática, parte del patrón Singleton private static EstadoPersistente _instance; // Propiedad privada para el directorio de trabajo private string _strDirectorioTrabajo; // Propiedad pública con get y set para controlar el acceso a _strDirectorioTrabajo public string directorio { get { return _strDirectorioTrabajo; } set { _strDirectorioTrabajo = value; } } // Constructor privado para evitar la instanciación externa public EstadoPersistente() { } private EstadoPersistente Inizializar() { _strDirectorioTrabajo = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); return this; } // Propiedad pública estática para acceder a la instancia public static EstadoPersistente Instance { get { if (_instance == null) { _instance = CargarEstado(); } return _instance; } } // Método para guardar el estado en un archivo JSON public void GuardarEstado() { var options = new JsonSerializerOptions { WriteIndented = true // para una salida JSON formateada legiblemente }; string json = JsonSerializer.Serialize(this, options); File.WriteAllText(_filePath, json); } // Método estático para cargar el estado desde un archivo JSON private static EstadoPersistente CargarEstado() { try { if (File.Exists(_filePath)) { string json = File.ReadAllText(_filePath); return JsonSerializer.Deserialize(json); } return new EstadoPersistente().Inizializar(); // Devuelve una nueva instancia si no existe el archivo } catch { return new EstadoPersistente().Inizializar(); // Devuelve una nueva instancia si no existe el archivo } } } }