【问题标题】:Extra text is written to file c#额外的文本被写入文件 c#
【发布时间】:2026-01-12 10:05:02
【问题描述】:

我目前正在尝试找到读取文本并将其重新写入文本文件的最有效方法。当我这样做时(使用 223 KB 的文件),我得到一个 224 KB 文件的结果,在原始文件中附加了一些额外的句子。 (这几个额外的句子似乎是从文件中间抓取的)。我似乎无法找到问题所在。以下是我正在使用的代码:

        while(...)
        {
            writeStream.Write(array, 0, array.Length);

            if (read == 0)
                break;
        }           

【问题讨论】:

  • 不相关,但.Close() 调用.Flush() 这样您就可以节省一些代码。
  • @test 你还没有看到答案吗?您总是写入array.Length 字节,但在最后一次迭代中,只有array 的一部分填充了真实数据。所以你应该只写你读过的字节(计数在read变量中)
  • 我还必须刷新'array'缓冲区作为我的while循环的最后一个操作,因为在这个问题之后,我不得不修改我读到的内容,我不能使用'read'作为第三个参数:/
  • @test 有趣的是,我已经编写了数百万个这样的代码,并且总是能够使用来自read 的返回值,并且永远不需要refresh
  • 一旦我阅读了文本,我将它传递给方法以删除一些标点符号;所以我将我的新字节放在一个新数组中,如果我使用'read'作为第三个参数,我会得到一个参数超出范围异常,因为 read 将大于 newArray.Length。因此,我将 newArray.Length 作为参数传递,这适用于小文件,我认为它适用于较大的文件(128MB),但即使在 while 循环中清除数组,最后也不会读取一些文本!!!我从来没有想过这个!

标签: c# file stream buffer


【解决方案1】:

应该是:

writeStream.Write(array, 0, read );

【讨论】:

  • 谢谢,我马上试试
【解决方案2】:

'write' 方法的第三个参数不正确。用 read 替换它,它应该可以工作

【讨论】: