熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

C#高級編程讀寫文本文件實例

2013-11-13 09:58:42  來源: .NET編程 

  理論上可以使用FileStream類讀取和顯示文本文件前面已經介紹了這個類上面顯示NewFiletxt文件的格式不太容易理解但這並不是FileStream類的問題——而在於我們在文本框中顯示結果所使用的方式
 
  如果知道某個文件包含文本通常就可以使用StreamReader 和 StreamWriter類更方便地讀寫它們這是因為這些類工作的級別比較高特別適合於讀寫文本它們執行的方法可以根據流的內容自動檢測出停止讀取文本較方便的位置特別是

      ●這些類執行的方法可以一次讀寫一行文本(StreamReaderReadLine() 和 StreamWriterWriteLine())在讀取文件時流會自動確定下一個回車符的位置並在該處停止讀取在寫入文件時流會自動把回車符和換行符添加到文本的末尾
 
  ●使用StreamReader 和 StreamWriter類就不需要擔心文件中使用的編碼方式(文本格式)了可能的編碼方式是ASCII(一個字節表示一個字符)或者基於Unicode的格式UNICODEUTF和 UTFWindows x系統上的文本文件總是ASCII格式因為Windows x系統不支持Unicode但Windows NTXP和都支持Unicode所以文本文件除了包含ASCII數據之外理論上可以包含UnicodeUTF或 UTF數據其約定是如果文件是ASCII格式就只包含文本如果是Unicode格式就用文件的前兩個或三個字節來表示這幾個字節可以設置為表示文件中格式的值的特定組合
 
  這些字節稱為字節碼標記在使用標准Windows應用程序打開一個文件時例如Notepad 或 WordPad不需要考慮這個問題因為這些應用程序都支持不同的編碼方法會自動正確地讀取文件StreamReader類也是這樣它可以正確讀取任何格式的文件而StreamWriter類可以使用任何一種編碼技術格式化它要寫入的文本另一方面如果要使用FileStream類讀取和顯示文本文件就不必自己處理這個過程了
  StreamReader類 
StreamReader用於讀取文本文件用某些方式構造一個StreamReader要比構造一個FileStream實例更簡單因為使用StreamReader時不需要FileStream的一些選項特別是不需要模式和訪問類型因為StreamReader只能執行讀取操作除此以外沒有指定共享許可的直接選項但StreamReader有兩個新選項 
●需要指定不同的編碼方法所執行的不同操作可以構造一個StreamReader 檢查文件開頭的字節碼標記確定編碼方法或者告訴StreamReader該文件使用某個編碼方法 
●不提供要讀取的文件名而為另一個流提供引用 
最後一個選項需要解釋一下因為它涉及到把讀寫數據的模型建立在流概念上的另一個優點StreamReader工作在相對比較高的級別上如果有另一個流在讀取其他源的數據就要使用由StreamReader提供的工具來處理這個流因為這個流包含文本此時StreamReader就非常有用了可以把這個流的輸出傳送到StreamReader上這樣StreamReader就可以讀取和處理任何數據源(不僅僅是文件)中的數據了前面在討論BinaryReader類時也討論了這種情況但在本書中只使用StreamReader來直接連接文件 
其結果是StreamReader有非常多的構造函數而且還有兩個返回StreamReader引用的FileInfo方法OpenText() 和 CreateText()下面僅說明其中一些構造函數 
最簡單的構造函數只帶一個文件名參數StreamReader會檢查字節碼標記確定編碼方法 
StreamReader sr = new StreamReader(@C:My DocumentsReadMetxt); 
另外如果指定UTF編碼方法 
StreamReader sr = new StreamReader(@C:My DocumentsReadMetxt  
  EncodingUTF); 
使用類SystemTextEncoding上的幾個屬性之一就可以指定編碼方法


這個類是一個抽象基類可以根據這個類定義許多類其方法可執行實際的文本編碼每個屬性都返回相應類的一個實例可以使用的屬性包括 
●ASCII 
●Unicode 
●UTF 
●UTF 
●BigEndianUnicode  
下面的示例解釋了如何把StreamReader關聯到FileStream上其優點是可以顯式指定是否創建文件和共享許可如果直接把StreamReader關聯到文件上就不能這麼做 
FileStream fs = new FileStream(@C:My DocumentsReadMetxt  
FileModeOpen FileAccessRead FileShareNone); 
StreamReader sr = new StreamReader(fs);  
對於本例指定StreamReader查找字節碼標記以確定使用了什麼編碼方法以後的示例也是這樣從一個FileInfo實例中獲得StreamReader 
FileInfo myFile = new FileInfo(@C:My DocumentsReadMetxt); 
StreamReader sr = myFileOpenText(); 
與FileStream一樣應在使用後關閉StreamReader如果沒有這樣做就會致使文件一直鎖定因此不能執行其他過程(除非使用FileStream構造StreamReader和特定的FileShare ShareReadWrite) 
srClose(); 
介紹完實例化StreamReader後就可以用該實例作一些工作了與FileStream一樣我們僅指出可以用於讀取數據的許多方式您應在SDK文檔說明書中查閱其他不太常用的StreamReader方法 
所使用的最簡單的方式是ReadLine()該方法一次讀取一行但返回的字符串中不包括標記該行結束的回車換行符 
string nextLine = srReadLine(); 
另外還可以在一個字符串中提取文件的所有剩余內容(嚴格地說是流的全部剩余內容) 
string restOfStream = srReadToEnd(); 
可以只讀取一個字符 
int nextChar = srRead(); 
Read()的重載方法可以把返回的字符轉換為一個整數如果到達流的尾端就返回 
最後可以用一個偏移值把給定個數的字符讀到數組中 
// to read characters in 
int nChars =
char [] charArray = new char[nChars];  
int nCharsRead = srRead(charArray nChars); 
如果要求讀取的字符數多於文件中剩余的字符數nCharsRead應小於nChars  
StreamWriter類 
StreamWriter類的工作方式與StreamReader的類似但StreamWriter只能用於寫入文件(或另一個流)構造StreamWriter的方法包括 
StreamWriter sw = new StreamWriter(@C:My DocumentsReadMetxt); 
上面的代碼使用了UTF編碼方法NET把這種編碼方法設置為默認的編碼方法如果要指定其他的編碼方法 
StreamWriter sw = new StreamWriter(@C:My DocumentsReadMetxt true 
  EncodingASCII); 
在這個構造函數中第二個參數是Boolean型表示文件是否應以追加方式打開構造函數的參數不能僅是一個文件名和一個編碼類 
當然可以把StreamWriter關聯到一個文件流上以獲得打開文件的更多控制選項 
FileStream fs = new FileStream(@C:My DocumentsReadMetxt  
  FileModeCreateNew FileAccessWrite FileShareRead); 
StreamWriter sw = new StreamWriter(fs);  
FileInfo不執行返回StreamWriter的任何方法  
另外如果要創建一個新文件並開始給它寫入數據可以使用下面的代碼 
FileInfo myFile = new FileInfo(@C:My DocumentsNewFiletxt); 
StreamWriter sw = myFileCreateText(); 
與其他流類一樣在使用完後要關閉StreamWriter 
swClose(); 
寫入流可以使用StreamWriterWrite()的個重載方法來完成最簡單的方式是寫入一個流後面加上一個回車換行符 
string nextLine = Groovy Line
swWrite(nextLine); 
也可以寫入一個字符 
char nextChar = ~a~; 
swWrite(nextChar); 
也可以寫入一個字符數組 
char [] charArray = new char[]; 
// initialize these characters 
swWrite(charArray); 
甚至可以寫入字符數組的一部分 
int nCharsToWrite =
int startAtLocation =
char [] charArray = new char[]; 
// initialize these characters 
swWrite(charArray startAtLocation nCharsToWrite); 
ReadWriteText示例 
ReadWriteText示例說明了StreamReader和StreamWriter類的用法它非常類似於前面的ReadBinaryFile示例但假定要讀取的文件是一個文本文件並顯示其內容它還可以保存文件(包括在文本框中對文本進行的修改)它將以Unicode格式保存文件 
所示的ReadWriteText用於顯示前面的NewFileaspx文件但這次讀取內容會更容易一些 
這裡不打算介紹給打開文件對話框添加事件處理程序的詳細內容因為它們基本上與前面的BinaryFileReader示例相同與這個示例相同打開一個新文件將調用DisplayFile()方法其惟一的區別是DisplayFile的執行方式本例有一個保存文件的選項這由另一個菜單項save來表示這個選項的處理程序調用我們添加到代碼中的另一個方法SaveFile()(注意這個新文件總是重寫原來的文件——這個示例沒有寫入另一個文件的選項) 

.NET編程免費提供,內容來源於互聯網,本文歸原作者所有。
推薦文章
Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.