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

耶胡达·布罗德里克

我正在做一个项目,用户可以在其中查看句子短语并选择句子中特定单词的特定含义(描述它的最佳方式)。我需要做的部分工作是保存当前所选句子的索引,以便在重新打开程序时,用户可以从上次中断的地方返回。那很简单。

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

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

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]);
    }
编码器

“现象”是您正在以人类的方式思考文件,您会看到换行符,但StreamWriter正在对字节进行操作。您最初有这一系列字节(注意回车和换行):

[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]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有人可以解释一下Scala的这一行编码吗

有人可以用javascript解释以下代码吗?它用于读取文本文件,但是我不了解XML和AJAX的内容?

有人可以从datepicker解释这一行代码吗

有人可以解释这一行代码吗?

有人可以在Theano教程的示例中帮助解释一行代码吗?

有人可以向我解释函数中的一行代码吗

有人可以向我解释这一行吗?c | = 1 << i;

有人可以向我解释这一行吗?

sparklyr:跳过文本文件的第一行

编辑大文本文件的第一行

复制文本文件的第一行?

只读文本文件的第一行

PHP编辑文本文件的第一行

有人可以解释这种死锁行为吗

有人可以在python中解释这种行为吗?

有人可以解释这种“让”作业行为吗?

有人可以向我解释这种行为吗?

有人可以向我解释这种行为吗?

有人可以向我解释这种行为吗?

有人可以解释这种查找方法的行为吗?

有人可以解释 .appendTo() 方法的这种语法吗?

有人可以帮助我使用rest-api中的文本文件吗?

有人可以用文本文件检查我的 Tkinter 和 python 代码吗?

从文本文件中删除除第一行外的所有内容

导入具有第一行特定单词的多个文本文件

有人可以解释一下这种递归的工作方式吗?

jTextArea使用BufferedReader仅将文本的第一行保存在文本文件中吗?

读取文本文件一行中的第一个单词时出现索引错误

C#解析文本文件会丢失每个文本文件的第一行