有人可以在覆盖文本文件的第一行时解释这种现象吗?

Can someone explain this phenomenon when overwriting the first line of a text file?

我正在做一个项目,用户可以在其中查看句子短语和 select 句子中特定单词的特定含义(描述它的最佳方式)。我需要做的部分工作是保存当前句子的索引 selected,以便在重新打开程序时,用户可以从他们离开的地方 return。那很容易。

但是,我在尝试覆盖保存他们工作的文件的第一行时遇到了一个问题(它包含查看的最后一句话的索引),即它删除了下一行(部分或其他)。迄今为止我发现的最好的(即唯一的)解决方案是重写整个文件,但我仍然想知道幕后发生了什么。

本质上,我首先将以下内容写入文本文件:

Andrew
ate
breakfast

然后我用WriteLine覆盖了第一行'Andrew 122',得到了以下内容:

Andrew 122
breakfast

使用 Write,我得到了这个:

Andrew 122e
breakfast

有谁能给我解释一下这是怎么回事吗?

(供参考,这是我用来测试的代码:

    static void Main(string[] args)
    {
        string path = String.Format(@"C:\Users\User\Desktop\{0} Project\test.txt", @"C#");
        if (File.Exists(path))
            File.Delete(path);

        WriteToFile(path, true, "Andrew", "ate", "breakfast");
        WriteToFile(path, false, "Andrew 122");
    }

public static void WriteToFile(string path, bool newLine, params string[] line)
    {
        using (FileStream fStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write))
        using (StreamWriter fWriter = new StreamWriter(fStream, Encoding.UTF8))
            for (int i = 0; i < line.Length; i++)
                if (newLine)
                    fWriter.WriteLine(line[i]);
                else
                    fWriter.Write(line[i]);
    }

"phenomenon" 是你在用人类的方式思考文件,在那里你看到换行符,但 StreamWriter 是按字节操作的。您最初有这一系列字节(注意回车 return 和新行):

[A][n][d][r][e][w][\r][\n][a][t][e][\r][\n][b][r][e][a][k][f][a][s][t]

然后用“122”覆盖字节 7-10

[A][n][d][r][e][w][  ][ 1][2][2][e][\r][\n][b][r][e][a][k][f][a][s][t]