C# StreamReader类和StreamWriter类
先看看 StreamReader,將前面的示例轉(zhuǎn)換為讀取文件以使用 StreamReader。它現(xiàn)在看起來容易得多。StreamReader 的構(gòu)造函數(shù)接收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);}} }不再需要處理字節(jié)數(shù)組和編碼。然而注意,StreamReader 默認(rèn)使用 UTF-8 編碼。指定另一個構(gòu)造函數(shù),可以讓 StreamReader 使用文件中序言定義的編碼:
var?reader?=?new?StreamReader(stream,?detectEncodingFromByteOrderMarks:?true);也可以顯式地指定編碼:
var reader = new StreamReader(stream, Encoding.Unicode);其他構(gòu)造函數(shù)允許設(shè)置要使用的緩沖區(qū);默認(rèn)為 1024 個字節(jié)。此外,還可以指定關(guān)閉讀取器時不應(yīng)該關(guān)閉底層流。默認(rèn)情況下,關(guān)閉讀取器時(使用 Dispose 方法),會關(guān)閉底層流。
不顯式實(shí)例化新的 StreamReader,而可以使用 File 類的 OpenText 方法創(chuàng)建StreamReader:
var reader = File.OpenText(fileName);對于讀取文件的代碼片段,該文件使用 ReadLine 方法逐行讀取。StreamReader還允許在流中使用 ReadToEnd 從光標(biāo)的位置讀取完整的文件:
string content = reader.ReadToEnd();StreamReader 還允許把內(nèi)容讀入一個字符數(shù)組。這類似于 Stream 類的 Read 方法;它不讀入字節(jié)數(shù)組,而是讀入 char 數(shù)組。記住,char 類型使用兩個字節(jié)。這適合于 16 位 Unicode,但不適合于 UTF-8,其中,一個字符的長度可以是 1 至 6 個字節(jié):
int nChars = 100; char[] charArray = new char[nChars]; int nCharsRead = reader.Read(charArray, 0, nChars);StreamWriter 的工作方式與 StreamReader 相同,只是 StreamWriter 僅用于寫入文件(或?qū)懭肓硪粋€流)。下面的代碼片段傳遞 FileStream,創(chuàng)建了一個 StreamWriter。然后把傳入的字符串?dāng)?shù)組寫入流:
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 默認(rèn)使用 UTF-8 格式寫入文本內(nèi)容。通過在構(gòu)造函數(shù)中設(shè)置 Encoding 對象,可以定義替代的內(nèi)容。另外,類似于 StreamReader 的構(gòu)造函數(shù),StreamWriter 允許指定緩沖區(qū)的大小,以及關(guān)閉寫入器時是否不應(yīng)該關(guān)閉底層流。
StreamWriter 的 Write() 方法定義了 17 個重載版本,允許傳遞字符串和一些 .NET 數(shù)據(jù)類型。請記住,使用傳遞 .NET 數(shù)據(jù)類型的方法,這些都會使用指定的編碼變成字符串。
?微信公眾號?
Dotnet講堂
總結(jié)
以上是生活随笔為你收集整理的C# StreamReader类和StreamWriter类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET点滴:SpanT
- 下一篇: Asp.NET Core一个接口的多个实