C# StreamWriter 没有正确终止文件

C# SteamWriter not terminating file correctly

我在 C# 中有以下代码,可将行数组写入文件。这个和File.WriteAllLines(string, string[]);的区别是我的没有在最后多留一个换行符。

public static void WriteAllLinesCompact(string path, IEnumerable<string> contents)
{
    if (path == null)
        throw new ArgumentNullException("path");
    if (contents == null)
        throw new ArgumentNullException("contents");

    bool isFirst = true;
    using (FileStream stream = File.OpenWrite(path))
    using (StreamWriter writer = new StreamWriter(stream))
    {
        foreach (string line in contents)
        {
            if (isFirst)
            {
                writer.Write(line);
                isFirst = false;
                continue;
            }

            writer.Write("\r\n" + line);
        }
    }
}

问题是它不会在最后一行之后终止文件。例如,如果最后一行是 "text = absolute",将最后一行替换为 "tempor" 并使用上述方法保存后,文件的最后一行将是 "tempor absolute" 而不是 "tempor" ].

如果您需要更多信息,请告诉我。

编辑:我将尝试更清楚地解释替换过程中发生的事情。

步骤 1:使用 File.ReadAllLines(string);
加载任何 .txt 文件 第 2 步:将最后一行替换为比上一行短的行。例如,如果最后一个值的长度是 10 个字符,那么新值可能应该是 7 个字符。
第 3 步:使用给定的方法保存到与以前相同的文件。

正如评论所建议的那样,在这种情况下最好的解决方案是保持简单并依赖于可靠的解决方案。例如:

bool isFirst = true;

using (StreamWriter writer = new StreamWriter(path))
{
    foreach (string line in contents)
    {
        if (isFirst)
        {
            writer.Write(line);
            isFirst = false;
            continue;
        }

        writer.Write(Environment.NewLine + line);
    }
}

就我个人而言,我更愿意使用 writer.WriteLine,但这会违反 OP 不包括最后一个新行的要求。