C# StreamReader类和StreamWriter类
先看看 StreamReader,將前面的示例轉換為讀取文件以使用 StreamReader。它現在看起來容易得多。StreamReader 的構造函數接收FileStream。使用 EndOfStream 屬性可以檢查文件的末尾,使用ReadLine 方法讀取文本行:
public static void ReadFileUsingReader(string fileName) {var stream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read);using?(var?reader?=?new?StreamReader(stream)){while?(!reader.EndofStream){string line = reader.ReadLine(); Console.WriteLine(line);}} }不再需要處理字節數組和編碼。然而注意,StreamReader 默認使用 UTF-8 編碼。指定另一個構造函數,可以讓 StreamReader 使用文件中序言定義的編碼:
var?reader?=?new?StreamReader(stream,?detectEncodingFromByteOrderMarks:?true);也可以顯式地指定編碼:
var reader = new StreamReader(stream, Encoding.Unicode);其他構造函數允許設置要使用的緩沖區;默認為 1024 個字節。此外,還可以指定關閉讀取器時不應該關閉底層流。默認情況下,關閉讀取器時(使用 Dispose 方法),會關閉底層流。
不顯式實例化新的 StreamReader,而可以使用 File 類的 OpenText 方法創建StreamReader:
var reader = File.OpenText(fileName);對于讀取文件的代碼片段,該文件使用 ReadLine 方法逐行讀取。StreamReader還允許在流中使用 ReadToEnd 從光標的位置讀取完整的文件:
string content = reader.ReadToEnd();StreamReader 還允許把內容讀入一個字符數組。這類似于 Stream 類的 Read 方法;它不讀入字節數組,而是讀入 char 數組。記住,char 類型使用兩個字節。這適合于 16 位 Unicode,但不適合于 UTF-8,其中,一個字符的長度可以是 1 至 6 個字節:
int nChars = 100; char[] charArray = new char[nChars]; int nCharsRead = reader.Read(charArray, 0, nChars);StreamWriter 的工作方式與 StreamReader 相同,只是 StreamWriter 僅用于寫入文件(或寫入另一個流)。下面的代碼片段傳遞 FileStream,創建了一個 StreamWriter。然后把傳入的字符串數組寫入流:
public?static?void?WritefileUsingWriter(string?fileName,?string[]?lines) {var?outputStream?= File.OpenWrite(fileName);?using?(var?writer?=?new?StreamWriter(outputStream))?{byte[] preamble = Encoding.UTF8.GetPreamble();outputStream.Write(preamble,?0,?preamble.Length);??writer.Write(lines);} }記住,StreamWriter 默認使用 UTF-8 格式寫入文本內容。通過在構造函數中設置 Encoding 對象,可以定義替代的內容。另外,類似于 StreamReader 的構造函數,StreamWriter 允許指定緩沖區的大小,以及關閉寫入器時是否不應該關閉底層流。
StreamWriter 的 Write() 方法定義了 17 個重載版本,允許傳遞字符串和一些 .NET 數據類型。請記住,使用傳遞 .NET 數據類型的方法,這些都會使用指定的編碼變成字符串。
?微信公眾號?
Dotnet講堂
總結
以上是生活随笔為你收集整理的C# StreamReader类和StreamWriter类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET点滴:SpanT
- 下一篇: C#语法糖 Null 条件运算符 【?.