Eva*_*van 0 c# file filestream streamwriter winforms
我已经创建了一个表单.如果接收到所有信息并且似乎工作,但是当我检查文本文件时没有写入任何内容,并且它只允许我在错误输出之前运行表单两次.有谁看到了问题?
const string FileName = "Friends.txt";
Friend friend = new Friend();
FileStream file = new FileStream(FileName, FileMode.OpenOrCreate, FileAccess.Read, FileShare.ReadWrite);
FileStream file2 = new FileStream(FileName, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
public Form1()
{
InitializeComponent();
}
private void enter_Click(object sender, EventArgs e)
{
StreamWriter write = new StreamWriter(file2);
try
{
friend.FirstName = firstName.Text;
friend.LastName = lastName.Text;
friend.PhoneNumber = phoneNumber.Text;
friend.Month = Convert.ToInt32(birthMonth.Text);
friend.Day = Convert.ToInt32(birthday.Text);
write.WriteLine(friend.ToString());
MessageBox.Show("Wrote " + friend.ToString() + " to file.");
}
catch(Exception error)
{
MessageBox.Show(error.Message + " Please reenter the information.");
}
firstName.Clear();
lastName.Clear();
phoneNumber.Clear();
birthMonth.Clear();
birthday.Clear();
write.Close();
file2.Close();
}
Run Code Online (Sandbox Code Playgroud)
你不能使用这样的文件.只有在实例化类时才会打开它们.然后在结束时enter_Click()
关闭文件,因此下次调用enter_Click()
文件时会关闭并失败.
在里面 创建文件,enter_Click()
以便在每次调用它们时打开和关闭它们.
您应该使用using
关键字来确保即使发生异常它们也会关闭.
您的代码看起来应该更像这样:
private void enter_Click(object sender, EventArgs e)
{
using (FileStream file2 = new FileStream(FileName, FileMode.Append, FileAccess.Write, FileShare.ReadWrite))
{
using (StreamWriter write = new StreamWriter(file2))
{
try
{
friend.FirstName = firstName.Text;
friend.LastName = lastName.Text;
friend.PhoneNumber = phoneNumber.Text;
friend.Month = Convert.ToInt32(birthMonth.Text);
friend.Day = Convert.ToInt32(birthday.Text);
write.WriteLine(friend.ToString());
MessageBox.Show("Wrote " + friend.ToString() + " to file.");
}
catch (Exception error)
{
MessageBox.Show(error.Message + " Please reenter the information.");
}
firstName.Clear();
lastName.Clear();
phoneNumber.Clear();
birthMonth.Clear();
birthday.Clear();
}
}
}
Run Code Online (Sandbox Code Playgroud)
有你的另一种方法可以解决这个-你可以一次只打开文件,并关闭它只有在类配置.然后你可以继续追加到文件,而不必继续重新打开和关闭它.
我不建议这样做.它会更有效率,但它更容易出错,如果你的程序崩溃,那么文件就有可能没有写入数据的危险 - 这可能会破坏文件.
安全地播放它并保持打开和关闭文件要好得多,除非你要写很多数据; 只有这样你才可以考虑这种替代方式.