C# 序列化(二)二進位序列化的案例

來源:互聯網
上載者:User

標籤:des   winform   style   blog   color   使用   os   io   

     這篇是針對上一篇講序列化的文章的一個實際案例,WinForm程式的主介面如下:

     思路:在點擊儲存按鈕時,將標題和內容儲存到集合中,自然想到應該是Dictionary<K,V>,而且用這個集合可以避免產生2個相同標題的日記。對添加到集合中的資料,採用二進位序列化到檔案中,在程式執行目錄中專門建一個“Notes”的檔案夾存放日記檔案,日記檔案的檔案名稱以標題命名。程式載入的時候,如果“Notes”檔案夾下有檔案,就在右側列表中負載檔案,點擊時還原序列化後顯示在左側。下面是具體代碼:

在Form1類下定義一個集合:

1 Dictionary<string, string> dic = new Dictionary<string, string>();

“儲存”按鈕的點擊作業碼如下:

 1             var sTitle = txtTitle.Text.Trim(); 2             var sContent = txtContent.Text.Trim(); 3  4             dic.Add(sTitle, sContent); 5  6             string fullPath = Path.Combine("Notes", sTitle + ".txt"); 7             using (FileStream fsWrite=new FileStream(fullPath,FileMode.Create,FileAccess.Write)) 8             { 9                 //進行二進位序列化10                 BinaryFormatter bf = new BinaryFormatter();11                 bf.Serialize(fsWrite, dic);12                 MessageBox.Show("添加日記成功");13             }

在Form1_Load中的事件處理代碼如下:

 1             string sPath1 = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 2             string sPath2 = "Notes"; 3             string fullPath1 = Path.Combine(sPath1, sPath2); 4             string[] strFiles = Directory.GetFiles(fullPath1, "*.txt"); 5  6             if (strFiles.Length>0) 7             { 8                 foreach (string item in strFiles) 9                 {10                     var s = Path.GetFileName(item);11                     listBox1.Items.Add(s);12                 }   13             }

在listBox1_SelectedValueChanged中的事件處理代碼如下:

 1           if (listBox1.SelectedItem!=null) 2             { 3                 var FileName = listBox1.SelectedItem.ToString(); 4                 var fullPath2 = Path.Combine("Notes", FileName); 5                 using (FileStream fsRead=new FileStream(fullPath2,FileMode.Open,FileAccess.Read)) 6                 { 7                     BinaryFormatter bf1 = new BinaryFormatter(); 8                     //進行二進位還原序列化 9                     Dictionary<string, string> dic2 = bf1.Deserialize(fsRead) as Dictionary<string, string>;10                     foreach (KeyValuePair<string,string> item in dic2)11                     {12                         txtTitle.Text = item.Key;13                         txtContent.Text = item.Value;14                     }15                 }16             }17             else18             {19                 MessageBox.Show("請選擇要查看的檔案");20             }

總結:

   程式還有些Bug,因為主要的重點是放在序列化的使用上,日後如果有時間再完善功能吧。

   1.對於新添加的日記,需要在下一次程式啟動中才會載入到右側listBox中(想法是做到儲存後就載入到listBox);

   2.對於日記的修改,修改內容後,點擊儲存,可適時看到修改的變化;而如果把標題和內容都修改了,程式則認為是一個全新的日記(Dictionary集合會因為key的不同,而重新添加)。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.