如何在文本文件中写入格式化字符串

How to write formatted string in text file

我正在使用 StringBuilder 来格式化我的字符串值,如下所示

Student Number: 3602

Registered On: 9/11/2018 12:00:00 AM

Enrollment number: 0

但是当我使用下面的代码将其写入文本文件时

using (StreamWriter sw = new StreamWriter(@"LocaltempPath\Sheet.txt"))
{
    sw.WriteLine(sb.ToString());
}

我的整个格式都被遗漏了,而不是上面显示的格式,值被复制到一行文本文件中!如何在写入文本文件时保留格式?

更新:我的 StringBuilder 代码

 StringBuilder sb = new StringBuilder("Student Number: " + StId);
 sb.Append("\n");
 sb.Append("Registered On: " + regdate);
 sb.Append("\n");
 sb.Append("Enrollment No: " + regnumber);
 sb.Append("\n");

使用 sb.AppendLine 而不是 sb.Append 将文本添加到单独的行中。 此外,如果您正在写入文件并需要下一行,请使用 Environment.NewLine 而不是 \n.

根据评论,不要使用硬编码的“\n”来表示换行符,除非您正在为 unix 系统准备数据

改为这样做:

StringBuilder sb = new StringBuilder("Student Number: " + StId);
sb.AppendLine();
sb.AppendLine("Registered On: " + regdate);
sb.AppendLine("Enrollment No: " + regnumber);

AppendLine() 可以在没有任何参数的情况下使用,只放入一个换行符,我在上面这样做是为了在您创建 stringbuilder 的字符串的末尾放置一个新行。也可以这样做:

StringBuilder sb = new StringBuilder();
sb.AppendLine("Student Number: " + StId);
sb.AppendLine("Registered On: " + regdate);
sb.AppendLine("Enrollment No: " + regnumber);

如果您想更好地控制日期格式等:

StringBuilder sb = new StringBuilder();
sb.AppendLine("Student Number: " + StId);
sb.AppendFormat("Registered On: {0:yyyy-MM-dd HH:mm:ss.fff}\r\n", regdate);
sb.AppendLine("Enrollment No: " + regnumber);

最后,每次调用 stringbuilder 上的 AppendXXX() returns 相同的 stringbuilder,因此您可以这样调用并节省一些输入:

StringBuilder sb = new StringBuilder();
sb.Append("Student Number: ").AppendLine(StId)
  .Append("Registered On: ").AppendLine(regdate);
  .Append("Enrollment No: ").AppendLine(regnumber);

确实,您应该避免将字符串连接与 + 和 stringbuilder 混合使用 - 如果您要进行大量字符串构建而只使用 stringbuilder,效率会更高。虽然它可能不会使您的代码更具可读性

就可读代码而言,您可能还想知道您可以这样做:

StringBuilder sb = new StringBuilder();
sb.AppendLine($"Student Number: {StId}");
sb.AppendLine($"Registered On: {regdate}");
sb.AppendLine($"Enrollment No: {regnumber}");

在这个简单的例子中,它并没有多大帮助,但它确实可以帮助连接很多东西的字符串:

$"Student Number: {StId}, Registered On: {regdate}, Enrollment No: {regnumber}"
//instead of
"Student Number: " + StId + ", Registered On: " + regdate + ", Enrollment No: " + regnumber

不同的操作系统(Unix、Windows、Mac)使用不同的换行符(Why?)。

您正在明确使用 \n,这是 Linux 默认设置,但它在 Windows 上的处理将取决于您用来查看文件的编辑器(记事本将显示所有文本为一长行)。要为新行使用系统默认字符,请使用 sb.AppendLine()Environment.NewLine 而不是 \n