首页 > 代码库 > C# 序列化(二)二进制序列化的案例
C# 序列化(二)二进制序列化的案例
这篇是针对上一篇讲序列化的文章的一个实际案例,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个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。