[讀書筆記 ]Stephens' C# Programming with Visual Studio 2010 24-Hour Trainer 第二十九章

  • 1721
  • 0

閱讀Stephens' C#教材第二十九章筆記

 

Chapter 29 Reading and Writing.
 
檔案在電腦中無所不在,看的圖片、聽的音樂、收的郵件都是檔案甚至連作業系統本身也是檔案組成,本章將介紹如何讀寫文字檔(Text File),但是由於檔案處理的方式非常多樣,本章只介紹其中一種。
 
開始之前先了解一個詞 Stream (串流)。雖然檔案有很多類型,比如網頁檔案、影音檔、聲音檔、執行檔,但是從某一個角度來看,它們有一個共通點,就是一串位元組合,存放在一個檔案系統的某一個地方,這是從電腦很低階的角度去看檔案,Stream (串流)就是指這些有順序的位元組。
Stream在網路影音或其他地方會有不同的含意,在此僅聚焦在File Stream(檔案串流)。
 
C#平台提供了一個Stream物件可以從低階的角度進行檔案的讀寫處理,StreamReader與StreamWriter就是其中負責讀寫的類別名稱。
 
由於StreamReader與StreamWriter類別是放在System.IO命名空間中,所以若想用簡短名稱,則必須在宣告區先加入Using System.IO
 
StreamWriter(詳細資料請參考微軟網頁)提供很多個建構子用來建立StreamWriter物件,最簡單的就是使用檔名當作參數,將所要寫入的檔案傳入StreamWriter,就完成寫入資料的準備動作。
由於StreamWriter類別有實作了IDisposable介面,所以可用Using區塊讓它自動呼叫Disposable釋放使用後的檔案資源。
 
以下的程式能夠開啟Memo.txt檔案將memoTextBox.Text資料寫入其中 (沒有輸入明確路徑名稱,則會自動以應用程式所在目錄帶入)
        using (StreamWriter memoWriter = new StreamWriter("Memo.txt")) 
        {
            //Write into the file.       
            memoWriter.Write(memoTextBox.Text);
            memoWriter.Close;
        }
 
StreamReader則可以讓你輕鬆讀取檔案的內容(詳細資料請參考微軟網頁),一如StreamWriter類別,StreamReader類別也使用檔名當作參數,將所要讀取的檔案傳入StreamWriter,就完成讀取資料的準備動作。注意當要讀取的檔案不存在時此類別是丟出例外的錯誤,建議在讀取檔案前,先用File類別的Exists方法判斷檔案是否存在,例如:File.Exists("Memo.txt"),如結果為True則代表檔案存在。
 
StreamReader類別提供了Read方法讓你可以一次讀一個或多個位元組,當然你也可以使用ReadLine及ReadToEnd方法。
ReadLine方法就是一次將下一行整行的String回傳
ReadLine及ReadToEnd方法則是一次將目前位置到檔案結束的所有資料回傳
 
以下的程式能夠開啟Memo.txt檔案並將全部內容讀到memoTextBox.Text中
        using (StreamReader memoReader = new StreamReader("Memo.txt")) 
        {
 	  //Write into the file.       
           memoTextBox.Text = memoReader.ReadToEnd();
	   memoReader.Close;
        }
StreamReader類別有一個屬性EndOfStream如果為True,表示已經讀到Stream的盡頭。
 
MultiplicationTable程式示範將使用者輸入的一個值排成序列,結果存到Table.txt中
 
Table.txt的內容如下圖:
 
SaveListBox程式示範將使用者輸入的資料顯示在List中,當使用者按下Save時,結果存到Values.txt中
 
SimpleEditor程式示範利用StreamReader類別與StreamWriter類別做出一個簡單的程式
 
TRY IT中以SaveAndRestoreValues程式示範資料輸入,自動在關閉檔案存到Values.txt中,並在程式開啟時自動讀入Values.txt的資料顯示在畫面中。