2011-08-29 74 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

我已經做了幾次:-) –

相關問題