IO.StreamWriter覆盖

时间:2013-11-10 12:20:31

标签: c# streamwriter

我试图在现有文本文件的第一行添加一些字符,streamwriter.write覆盖了我添加的字符长度的行是否有一种非常简单的方法来编写我想要的文本或我要添加的字符,不会覆盖现有的字符,也不会使用streamreader或temp文件。 我的代码:

        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

1 个答案:

答案 0 :(得分:1)

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

所以为了避免出现内存不足的情况,你可以采用一定的块大小,让我们说几兆字节,然后处理这些块...

在开头你有一个缓冲区,用于保存你想要插入的数据(insBuffer)

然后你需要一个缓冲区来保存需要移动到文件末尾的块(tmpBuffer)

程序将是这样的:

转到要插入的文件中的位置(让我们调用此位置insOffset)

从该位置,将所需的数据块大小读入tmpBuffer(或者如果文件的剩余部分较少,那么就是这样)

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

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