c# - 在 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()
意味着要覆盖文件,但是保存程序时不会覆盖任何内容。
解决方案
您必须在循环之前重置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());
推荐阅读
- typescript - 深度克隆对象时出现 Typescript 错误 2345
- c - ARMv7 汇编语言:如何添加两个 uint32_t 并返回一个 uint64_t 结果
- c++ - 填空
- node.js - 获取请求响应包含objectid和versionkey而不是原始数据
- java - 映射嵌套的 json 字段
- python - Python:列表如何在递归中工作
- html - 使页面在所有移动设备上都具有响应性
- unit-testing - VueJS 单元测试错误 - 未实现:window.open
- linux - 将postgres从windows重定向到linux
- xamarin.forms - 如何在没有苹果开发者帐户的情况下测试 xamarin forms ios 应用程序?