2009-11-11 60 views
2

我想了解讀寫文件的不同方式,以及它們的優缺點。像什麼時候使用TextWriter/TextReader當File.Create或StreamReader/StreamWriter FileStream等用C#讀寫文件的不同方式

什麼時候用什麼?

回答

7

File.*靜態方法是建設新FileStream S的只是簡單的方法,FileWriter小號等,他們是非常有用的 - 我一般使用文件*優先於顯式調用構造函數,除非我需要一些行爲,這是不照顧。

主要關鍵的一點是:

  • 對於二進制數據,使用Stream
  • 對於文本數據,使用TextWriter/TextReader

如果你開始試圖讀取二進制數據TextReader,不好的事情會發生。

+0

我忘了XML。什麼是XML? – Tanmoy 2009-11-12 11:46:44

+0

XML API往往有直接加載文件的方法,例如'XDocument.Load' – 2009-11-13 10:14:45

1

這些過程使用的基本機制是相同的,所以沒有一個比另一個「更好」。

區別在於執行某些任務的難易程度。例如,File.CreateText返回一個StreamWriter,它在功能上與手動創建StreamWriter並使用它寫入文件沒有區別。它只需要更少的代碼。 (我認爲它是一條捷徑)。

3

我當然沒有接近這個主題的專家,但我只想指出,TextReaderTextWriter是許多其他類用來處理不同類型I/O的基類(我相信是抽象類) O. StreamReaderStreamWriter應該在您實際處理包含文本的Stream對象時使用,例如文本文件的FileStream。但是TextReader不一定需要處理流;以StringReader類爲例,它也繼承自TextReader,並且只讀取一個簡單的字符串。

5

Stream是一個抽象類,它表示字節的序列

  • FileStream派生自Stream並允許您將文件視爲Stream。

TextReader/TextWriter是抽象類,允許你讀/寫字符

File.*靜態方法只是簡化FileStream創建的簡便方法。

1

不要忘了靜態輔助方法System.IO.File.WriteAllByte(...).WriteAllText(...).WriteAllLines(...)及其相應的.ReadAllByte(...).ReadAllText(...).ReadAllLines(...)方法。如果我沒有任何理由要使用流,我會使用它們,因爲它們是快速getter/putter文件IO方法。