1

我正在尝试将一些字符添加到现有文本文件的第一行,streamwriter.write 用我添加的字符长度覆盖该行是否有一种非常简单的方法来编写我想要的文本或我想要添加的字符不覆盖现有的,不使用流读取器或临时文件。我的代码:

        FileStream fs = new FileStream(@"G:\PayLoad.txt",FileMode.Open);
        StreamWriter sw = new StreamWriter(fs); \\ IF First line is ==>> 123456789
        sw.BaseStream.Position = 0;
        sw.Write("REM ");      \\ This will overwrite to be ==>> REM 56789 
        sw.Close();     \\ we want it to be ==>> REM 123456789
4

1 回答 1

1

在大多数操作系统上,文件不是这样工作的......一般来说,没有“插入”这样的东西......你可以尝试 Keith 的方法并使用内存映射文件......你必须阅读从您要插入的位置到文件末尾的文件,然后覆盖您应该插入的所需部分,然后在您插入的部分之后写入您已阅读的部分......考虑到文件可能真的很大,并且可能很难一次将所有内容读入内存...

因此,为了避免内存不足的情况,您可以采用一定的块大小,比如说最多几兆字节,然后处理这些块......

一开始你有一个缓冲区来保存你想要插入的数据(insBuffer)

那么您将需要一个缓冲区来保存需要移动到文件末尾的块(tmpBuffer)

程序是这样的:

转到文件中要插入的位置(让我们将此位置称为 insOffset)

从该位置,将所需的数据块大小读入 tmpBuffer (或者如果文件的剩余部分较少,则仅此而已)

现在覆盖您要插入的位置的文件并将 insOffset 移动到您刚刚插入的数据后面

现在需要将 tmpBuffer 的当前内容插入到由 insOffset 标记的位置 ...您可以看到该过程在此处重复,直到您到达文件末尾...

于 2013-11-10T12:39:31.187 回答