不会写入文本文件

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)

Mat*_*son 5

你不能使用这样的文件.只有在实例化类时才会打开它们.然后在结束时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)

有你的另一种方法可以解决这个-你可以一次只打开文件,并关闭它只有在类配置.然后你可以继续追加到文件,而不必继续重新打开和关闭它.

建议这样做.它会更有效率,但它更容易出错,如果你的程序崩溃,那么文件就有可能没有写入数据的危险 - 这可能会破坏文件.

安全地播放它并保持打开和关闭文件要好得多,除非你要写很多数据; 只有这样你才可以考虑这种替代方式.