我有一個奇怪的情況,我不明白與我正在發送到文件的換行符'\n'
有關。根據TextWriter
和Environment
的NewLine
屬性,換行似乎不被處理。此代碼演示:Environment.NewLine和TextWriter.NewLine屬性有什麼用處
String baseDir = Environment.GetEnvironmentVariable("USERPROFILE") + '\\';
String fileName = baseDir + "deleteme5.txt";
FileInfo fi = new FileInfo(fileName);
fi.Delete();
FileStream fw = new FileStream(fileName, FileMode.CreateNew, FileAccess.Write);
StreamWriter sw = new StreamWriter(fw);
Console.WriteLine(Environment.NewLine.Length);
Console.WriteLine(sw.NewLine.Length);
sw.Write("1\uf0f1\n2\ue0e1\n3\ud0d1\n");
sw.Flush();
sw.Close();
當我運行此控制檯輸出
當我看着我的十六進制模式文件獲取:
00000000h:31 EF 83 B1 0A 32 EE 83 A1 0A 33 ED 83 91 0A; 1ï±.23íƒ'。
很明顯,API說的是兩個字符,當你在文件中查看時只有一個字符。現在,當我查看TextWriter中Write方法的描述時,它指示Write方法不會用NewLine屬性替代0A。那麼,如果Write方法沒有考慮到這一點,有沒有一個,但有兩個NewLine屬性的用途?這些是爲了什麼?
有沒有賭注這樣做的方式不涉及製作三個方法調用而不是一個的開銷?據我瞭解,'WriteLine'會考慮到'TextWriter.NewLine'屬性。我仍然留下了「Environment.NewLine」的目的是什麼。 – Mishax
爲了幫助消除讀者對上述評論的任何誤解:WriteLine(X)只需調用Write(X),然後調用WriteLine(),而WriteLine()又簡單地追加TextWriter.NewLine。換句話說,TextWriter.NewLine簡單地決定了每個WriteLine(X)調用結束時TextWriter附加的內容。而已。它完全按照您發送的內容準確發送您發送的內容。 – AnorZaken