執行 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; } }