gpt4 book ai didi

c# - 在 c# .net 中覆盖/删除文本文件的内容

转载 作者:行者123 更新时间:2023-11-30 23:02:42 25 4
gpt4 key购买 nike

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

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() 是为了覆盖文件,但在保存程序时没有任何内容被覆盖。

最佳答案

您必须在 foreach 循环之前重置 StudentInfoHolder 类成员,或者更好的是,将本地字符串变量与 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());

关于c# - 在 c# .net 中覆盖/删除文本文件的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50340026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com