首页 > 解决方案 > 在 c# .net 中覆盖/删除文本文件的内容

问题描述

我正在制作一个将学生对象列表写入文本文件并需要保存的程序,我可以简单地覆盖文件的内容或删除内容并重写新列表。这是我在搜索后尝试使用的代码,

private void saveTSMI_Click(object sender, EventArgs e)
    {
        if (lstStudNames.Items.Count != 0)
        {
            SaveFileDia.Filter = "Text Files | *.txt";
            if (SaveFileDia.ShowDialog() == DialogResult.OK)
            {
                //Clear the file 
                File.WriteAllText(SaveFileDia.FileName, string.Empty);

                //Put all the student info into a string
                foreach (Stud student in StudentList)
                {
                    StudentInfoHolder += "Name: " + student.Name + Environment.NewLine +
                    "Subject: " + student.Subject + Environment.NewLine +
                    "Age: " + student.age + Environment.NewLine +
                    "Grade: " + student.Grade + Environment.NewLine
                    + Environment.NewLine;
                }
                Clipboard.SetText(StudentInfoHolder);
                File.WriteAllText(SaveFileDia.FileName, StudentInfoHolder);
            }
        }
        else
        {
            MessageBox.Show("Nothing to save");
        }

我已经看到这File.WriteAllText()意味着要覆盖文件,但是保存程序时不会覆盖任何内容。

标签: c#.netvisual-studiostreamwriter

解决方案


您必须在循环之前重置StudentInfoHolder类成员foreach,或者更好的是,将本地字符串变量与String.Format如下方法结合使用:

string studentInfoHolder;

foreach (Stud student in StudentList)
{
    studentInfoHolder += 
        string.Format("Name: {0}\r\nSubject: {1}\r\nAge: {2}\r\nGrade: {3}",
                      student.Name, student.Subject, student.age, student.Grade); 
}

File.WriteAllText(SaveFileDia.FileName, studentInfoHolder);

另外,你是对的,它File.WriteAllText覆盖了文件内容,所以这一行是没用的:

File.WriteAllText(SaveFileDia.FileName, string.Empty);

更新

正如@kevin 正确指出的那样,StringBuilder在循环中使用而不是字符串连接更有效:

StringBuilder studentInfoHolder;

foreach (Stud student in StudentList)
{
    studentInfoHolder.AppendFormat("Name: {0}\r\nSubject: {1}\r\nAge: {2}\r\nGrade: {3}",
                                   student.Name, student.Subject, student.age, student.Grade); 
} 

File.WriteAllText(SaveFileDia.FileName, studentInfoHolder.ToString());

推荐阅读