2011-08-29 23 views
0

我正在尝试使用流编写器写入某些文本文件。 我正在尝试编写的文本来自不同的文本文件。对C#中的流编写器/阅读器可以写入/读取的文本数量有限制吗?

我尝试:

string line = reader.ReadLine(); //reader is a streamReader I defined before 
while (line != null) 
{ 
    sw.WriteLine(line); //sw is a streamWriter I defined before 
    line = reader.ReadLine(); 
} 

我也试过:

while (!(reader.EndOfStream)) 
{ 
    sw.WriteLine(reader.ReadLine()); //sw is a streamWriter I defined before 
} 

这两种方法成功地将文本从文件到另一个文件拷贝,但由于某些原因没有全部文本被复制。 我试图复制的文本文件非常大,大约有96000行,只有〜95000行的第一行被复制。

因此,我问是否有一个文本的数量限制,我可以使用C#编写/阅读流的作家/读者?

此外,我要求如何成功复制所有文本的一些建议。 (我读过Stream类的方法副本,但是这是.NET4的,所以它不会帮助)。

编辑:我试图把最后没有被复制的文本替换成被复制的开始。我遇到了同样的问题,所以对角色不存在问题。

+0

这是一个ASCII文本? –

+0

是的,它是ASCII文本 – George

+0

我有同样的想法,源文件中可能会有一些奇怪的二进制字符导致提前终止。 –

回答

3

嗯。可能你并没有冲洗你的流。尝试做sw.Autoflush = true;或者,在关闭sw之前,请调用sw.Flush();

+0

谢谢。问题是我没有关闭流。我补充一下,解决了它。之后,我添加了冲洗,它也工作正常。什么确实冲洗干什么? – George

+0

为了使写入效率更高,每当您调用Write时,流不一定会立即写入磁盘。它会缓冲内存中的写入,然后缓冲区足够大,一次将它们写入磁盘。调用flush可以确保写入到磁盘。当然,调用close也可以将所有字节写入磁盘,但这不一定能保证。 – aquinas

+0

谢谢。所以,如果我理解你是对的,冲洗总是更好?或者有时出于某种原因,最好不要使用它?我的意思是旁边的效率 – George

0

我会猜测你没有在输出流上调用flush。这会导致最后几行(有时很多)行不被写入输出文件。

+1

有时我觉得你应该能够看到其他人在输入你的答案时正在打字。 :)。当我在发布我的帖子后看到你的回答时,我实际上想了一会儿,我贴了一张。 :) – aquinas

+0

我已经做了几次:-) –

相关问题