2014-04-27 47 views
1

我在C#中將多個文本文件合併成單個文本文件,並且我正在使用字節數組來分塊......這部分正在爲我工​​作。但是現在我想在將新的文本文件合併到我的目標文本文件之前添加一個新行。我在不同的主題上發現使用下面的代碼應該讓我添加一個新行,但由於某種原因,我的文本文件中的最終輸出是一個小塊(਍),而不是一個新行。如何正確添加CRLF(Environment.NewLine)到FileStream?

有問題的代碼位:

byte[] newLine = Encoding.Default.GetBytes(Environment.NewLine); 
output.Write(newLine, 0, newLine.Length); 

代碼的完整部分,其合併文本文件:

int chunkSize = 3 * 1024; // 3KB 

using (FileStream output = File.Create(outputFolder + @"\TargetFile.txt")) 
{ 
    foreach (string text in textFiles) 
    { 
     using (FileStream input = File.OpenRead(text)) 
     { 
      byte[] buffer = new byte[chunkSize]; 
      int bytesRead; 
      while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0) 
      { 
       output.Write(buffer, 0, bytesRead); 
      } 

      byte[] newLine = Encoding.Default.GetBytes(Environment.NewLine); 
      output.Write(newLine, 0, newLine.Length); 
     } 
    } 
} 

我可以在記事本或其他文字沒有問題打開TargetFile.txt編輯和我能夠看到我的所有文本完美呈現,除了額外的新線我想添加...我做錯了什麼?

注意:在我的代碼示例中,我使用的是Encoding.Default,但我也嘗試使用,結果完全相同。

+2

你試過UTF8編碼嗎? –

+0

@MatíasFidemraizer是的...我剛剛嘗試過,結果相同... – sergeidave

+0

而且,您是否嘗試寫出換行符並查看會發生什麼?我的意思是,寫一個帶有1個換行符的文件。 –

回答

3

問題中的字符是U + 0A0D,它實際上並不是有效的字符。你希望U + 000D後跟U + 000A,並且你得到U + 0A0D的事實表明該文本文件使用16位小端Unicode編碼,所以Encoding.Default,和Encoding.UTF8都是錯誤的。 Encoding.Unicode更可能是正確的。

需要注意的是,沒有一個固定的文本文件的編碼,所以實際上Encoding.Default是錯誤這裏不作錯了到處。準備處理不同編碼的文件。

+0

現貨!使用'Encoding.Unicode'這個技巧(所讀取的所有源文件都使用Little-Endian編碼),非常感謝! – sergeidave