2011-07-08 89 views
4

我真的很困惑有多少種不同的方式來將數據寫入到system.IO文件中。
我的意思是,fileStream,StreamWriter之間或只是system.IO.file方法......哪一個是最好用的?哪些寫入文件方法使用?

當你看到你可以對它們中的任何一個使用不同的結構時,它甚至會變得更加混亂,就像使用「使用」或不使用它們一樣。

它們之間有什麼區別嗎?在線教程似乎只能堅持其中一個,完全忽略其他的。其中一些教程甚至使用不同的引用文件的方式來寫入(在某些情況下使用File類型,在其他情況下使用FileInfo類型,或者甚至僅使用其路徑/名稱的字符串)。

其中任何一個比另一個更有效率?

回答

5

Stream是一個「數據字節」的抽象,用於除文件之外的其他內容,比如通過網絡發送的字節。

TextReader s和TextWriter s是用於與文本一起使用。 StreamReader s和StreamWriter s是包裝Stream s的特定種類。

File類專門用於將文件視爲單元實體,而不是長的字節流。因此:

  • 如果文件可能(我會說,這意味着1 MIB +),使用Stream - 相關類。它通常是沒有意義的,以保持一個10-MIB byte[]string在內存中,除非你真的需要隨機存取所有
  • 如果它總是很小(因此將它全部保留在內存中是有意義的),則可以使用File類讀取和寫入byte[] s或string s。
3

有很多方法,因爲有很多方法來發送數據結構。你有字符串的數組嗎?你是否從其他來源傳輸數據(如網絡流)?你想寫一行文字,如日誌?

這將有助於知道你想寫什麼,然後我們可以幫助你決定如何。

噢,如果可以的話,總是使用'​​使用'。即使你的代碼失敗了,你也可以獲得資源清理,這是一件好事。

2

StreamWriter和StreamReader類用於讀取和寫入文本,而FileStream類是爲二進制(非文本)數據設計的。

1

這取決於你需要使用哪個層次的抽象和什麼樣的數據,你正在使用(文字工作與二進制)。

如果你只是需要將數據轉儲到一個文件,你可以使用在File講座WriteAllBytes()二進制的helper方法(它只是寫入到FileStream你)和WriteAllLines()WriteAllText()文本(他們使用StreamWriter爲此,使用UTF8NoBOM編碼,除非另有規定)。

A StreamWriter允許您將文本寫入指定的流,該流可能是FileStream或某種其他類型的流。

如果您需要寫入字節並且需要低級別控制,例如指定文件模式,系統權限,文件共享以及其他此類選項,則需要使用文件流。您還可以指定這些選項以使用文本,將其傳遞到StreamWriter或將文本視爲字節(例如,通過使用Encoding對象)。

相關問題