保留設定值

      在〈保留設定值〉中尚無留言

執行 App 時更改一些預設的設定值,比如儲存路徑由預設的 c:\tmp 更改為 d:\youtube,然後希望下一次執行時,儲存路徑能保留上次更改的 d:\youtube,這種需求就需保留上一次的設定值。

保留設定值的方式,在 C# 需靠序列化的方式將資料儲存在當前目錄下的 .txt檔。

說穿了,就是把要儲存的物件資料,變成 Json 格式,再將 Json 變成字串然後儲存。

那跟 “序列化” 有啥關係 ? 所謂的序列化,就是一串一串的寫入,就跟字串寫入的方式一樣,所以其實可以把 “Json 序列化” 翻譯成 “轉換成 Json 格式的字串”。

Json 格式又是什麼? 其實就是 Python  的字典,如下

{“pathInfo”:”c:\youtube_download”, “password”:”123456″}

自訂 PathInfo 類別

首先需新增一個自訂類別,比如 class PathInfo,再於此類別列出要儲存的變數名稱,如下

class PathInfo
{
    public string infoPath { get; set; }
}

儲存設定值

儲存設定值的時機,在按下更改路徑按鈕時,將設定值儲存在應用程式安裝目錄下的 previous.json 檔案中。

首先產生 PathInof info 物件,將要儲存的資料置於 info 中。

再由 JsonSerializer.Serialize(info) 將 info 變成 Json 格式的字串。
(網路上的說法~~~ 將 Info 序列化成 Json 格式)

再由 File.WriteAllText 將上述字串寫入檔案中。

private void btnPath_Click(object sender, RoutedEventArgs e)
{
    using (var dialog = new System.Windows.Forms.FolderBrowserDialog())
    {
        if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            path = dialog.SelectedPath;
            var info = new PathInfo
            {
                infoPath = path
            };
            File.WriteAllText("previous.json", JsonSerializer.Serialize(info));
            lblPath.Content = path.Replace("_", "__");
        }
    }
}

取得設定值

先判斷 previous.json 檔案是否存在,如果存在的話,將 previous.json  裏的字串讀入。再由 JsonSerializer.Deserialize<PathInfo>(字串) 將 Json 格式字串解序列化轉成 PathInfo 物件。

private async void Window_Loaded(object sender, RoutedEventArgs e)
{
            
    if (File.Exists("previous.json"))
    {
        var jsonString = File.ReadAllText("previous.json");
        PathInfo info = JsonSerializer.Deserialize<PathInfo>(jsonString);
        path = info.infoPath;
    }
            
    if (!Directory.Exists(path))
    {
        Directory.CreateDirectory(path);
    }
    lblPath.Content = path.Replace("_", "__");
}

取得應用程式安裝目錄

應用程式的安裝目錄可用如下代碼取得

AppDomain.CurrentDomain.BaseDirectory

一般安裝目錄如下 :

C:\Users\mahal\AppData\Local\Apps\2.0\474N9HVW.QKR\A1QEH9DN.H18\maha..tion_0000000000000000_0001.0000_8bac4707cc4e61ca\

完整代碼

完整代碼如下

    public partial class MainWindow : Window
    {
        IWebDriver browser;
        Dictionary<String, String> dicts = new Dictionary<String, String>();
        string path = "c:\\youtube_download";
        public MainWindow()
        {
            InitializeComponent();
        }
        private async void Window_Loaded(object sender, RoutedEventArgs e)
        {
            txtStatus.Text=$"MahalYT Install Path : {AppDomain.CurrentDomain.BaseDirectory}";
            if (File.Exists("previous.json"))
            {
                var jsonString = File.ReadAllText("previous.json");
                PathInfo info = JsonSerializer.Deserialize(jsonString);
                path = info.infoPath;
            }
            
            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }
            lblPath.Content = path.Replace("_", "__");
        }
        private void btnPath_Click(object sender, RoutedEventArgs e)
        {
            using (var dialog = new System.Windows.Forms.FolderBrowserDialog())
            {
                if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    path = dialog.SelectedPath;
                    var info = new PathInfo
                    {
                        infoPath = path
                    };
                    File.WriteAllText("previous.json", JsonSerializer.Serialize(info));
                    lblPath.Content = path.Replace("_", "__");
                }
            }
        }
    }
    class PathInfo
    {
        public string path;
    }
}

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *