using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace TextFile
{
public partial class FrmFile : Form
{
public FrmFile()
{
InitializeComponent();
}
private void btnSave_Click(object sender, EventArgs e)
{
Student stu1 = new Student()
{
StudentName = this.txtName.Text.Trim(),
StudentAge = Convert.ToInt32(this.txtAge.Text.Trim()),
StudentGender = this.txtGender.Text.Trim(),
StudentBirthday = Convert.ToDateTime(this.txtBirthday.Text.Trim())
};
Directory.CreateDirectory(@"StudentInfo");
FileStream fs = new FileStream(@"StudentInfo\Student.txt", FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine(stu1.StudentName);
sw.WriteLine(stu1.StudentAge);
sw.WriteLine(stu1.StudentGender);
sw.WriteLine(stu1.StudentBirthday);
sw.Close();
fs.Close();
MessageBox.Show(stu1.StudentName + "信息保存成功");
}
private void button2_Click(object sender, EventArgs e)
{
FileStream fs = new FileStream(@"StudentInfo\Student.txt", FileMode.Open);
StreamReader sr = new StreamReader(fs, Encoding.UTF8);
Student duStudent = new Student()
{
StudentName = sr.ReadLine(),
StudentAge = Convert.ToInt32(sr.ReadLine()),
StudentGender = sr.ReadLine(),
StudentBirthday = Convert.ToDateTime(sr.ReadLine())
};
this.txtName.Text = duStudent.StudentName;
this.txtAge.Text = duStudent.StudentAge.ToString();
this.txtGender.Text = duStudent.StudentGender;
this.txtBirthday.Text = duStudent.StudentBirthday.ToString();
}
}
}
使用文本保存对象状态存在的问题
- 当对象属性发生变化时, 需要增加或减少信息的写入或读取次数
- 信息安全性较差
- 存对象的各种属性的顺序与读对象的各种属性的顺序要一致
使用序列化和反序列化保存与还原对象
private void btnSerialize_Click(object sender, EventArgs e)
{
Student stu1 = new Student()
{
StudentName = this.txtName.Text.Trim(),
StudentAge = Convert.ToInt32(this.txtAge.Text.Trim()),
StudentGender = this.txtGender.Text.Trim(),
StudentBirthday = Convert.ToDateTime(this.txtBirthday.Text.Trim())
};
FileStream fs = new FileStream("objStudent.stu", FileMode.Create);
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(fs, stu1);
fs.Close();
}
private void btnDeserialize_Click(object sender, EventArgs e)
{
FileStream fs = new FileStream("objStudent.stu", FileMode.Open);
BinaryFormatter formatter = new BinaryFormatter();
Student objStudent = (Student)formatter.Deserialize(fs);
fs.Close();
this.txtName.Text = objStudent.StudentName;
this.txtAge.Text = objStudent.StudentAge.ToString();
this.txtGender.Text = objStudent.StudentGender;
this.txtBirthday.Text = objStudent.StudentBirthday.ToString();
}
- 参与序列化与反序列化的类前加[Serializable]