2010-02-18 72 views
3

我正在對文件進行更改,'source'文件是純文本文件,但來自UNIX系統。(C#WinFoms)寫入文件和新行

我使用StreamReader來讀取'源'文件,然後使用AppendLine()製作並存儲對StringBuilder的更改。

然後我創建一個StreamWriter(使用與StreamReader相同的Encoding進行設置)並寫入文件。

現在,當我使用WinMerge比較這兩個文件時,它會報告回車符是不同的。

我應該怎麼做才能確保回車符與我正在編輯的文件類型相同?

還應當指出的是,那些被修改文件可能來自任何系統,不只是從一個UNIX系統中,他們同樣可以從Windows系統 - 所以我想將這些的一種方式與原始文件具有相同回車類型的新行

非常感謝任何回覆。

:)

回答

3

文件使用的行尾類型與編碼無關。這聽起來像您可能需要閱讀源文件以確定開頭的行結尾(您必須明確執行;我不相信框架中有任何內容可爲您提供該信息),然後在創建時明確使用該結尾新文件。 (而不是調用AppendLine的,用適當的行終止該文件再次撥打Append與線本身,然後Append。)

注意單個文件可以有各種行結尾的 - 一些「\ r \ n「,一些」\ n「和一些」\ r「,因此您必須應用適當的啓發式(例如選取最常見的行結尾)。

+0

哦,快樂。謝謝喬恩,我會研究它。 – JustAPleb 2010-02-18 11:36:18

4

首先,您需要聲明當前文件的換行符是什麼。這可能是一個問題,因爲給定的文件可以混合不同的行尾。

然後你可以設置你StreamWriterNewLine屬性:

StreamWriter sw = new StreamWriter("example.txt"); 

sw.NewLine = "\r"; 

有關行尾一個有趣的閱讀退房The Great Newline Schism

+0

感謝Joao,我正在調查它,看起來很有趣。乾杯 – JustAPleb 2010-02-18 11:41:58