c#文字檔案(.txt)讀寫
目錄 前言
讀取txt檔案
寫入txt檔案
前言計算機在最初只支援ascii編碼,但是後來為了支援其他語言中的字元(比如漢字)以及一些特殊字元(比如€),就引入了unicode字符集。基於unicode字符集的編碼方式有很多,比如utf-7、utf-8、unicode以及utf-32。在windows作業系統中,乙個文字檔案的前幾個位元組是用來指定該檔案的編碼方式的
如果你使用notepad或wordpad來開啟乙個文字檔案,你並不用擔心該檔案的編碼方式,因為這些應用程式會先讀取檔案的前幾個位元組來確定該檔案的編碼方式,然後用正確的編碼將文字中的每個字元顯示出來。下面的圖中,可以看到當用notepad記事本儲存乙個文件時,可以選擇的編碼(encoding)方式有哪些
用.net讀取文字檔案或寫入文字檔案,你都不需要擔心編碼方式,.net已經將這些封裝好了。在讀取乙個文字檔案的時候,如果你已經知道文字使用的是什麼編碼方式,你可以指定使用哪種編碼方式讀取文字,否則如果不指定編碼方式,.net會讀取文字的前幾個位元組來確定使用哪種編碼方式讀取檔案內容的。在寫入文字檔案的時候,你也可以指定你想使用的編碼方式。如果你沒有指定編碼,.net會根據寫入的文字是否含有特殊字元來決定編碼方式。如果沒有特殊字元,就採用ascii編碼,如果有特殊字元,就採用utf-8編碼
讀取txt檔案
如果你要讀取的檔案內容不是很多,可以使用 file.readalltext(filepath) 或指定編碼方式 file.readalltext(filepath, encoding)的方法。它們都一次性將文字內容全部讀完,並返回乙個包含全部文字內容的字串
string str1 = file.readalltext(@」c:\temp\a.txt」);
//也可以指定編碼方式
string str2 = file.readalltext(@」c:\temp\a.txt」, encoding.ascii);
也可以使用方法file.readalllines,該方法一次性讀取文字內容的所有行,返回乙個字串陣列,陣列元素是每一行的內容
string strs1 = file.readalllines(@」c:\temp\a.txt」);
// 也可以指定編碼方式
string strs2 = file.readalllines(@」c:\temp\a.txt」, encoding.ascii);
當文字的內容比較大時,我們就不要將文字內容一次性讀完,而應該採用流(stream)的方式來讀取內容。
.net為我們封裝了streamreader類,它旨在以一種特定的編碼從位元組流中讀取字元。streamreader類的方法不是靜態方法,所以要使用該類讀取檔案首先要例項化該類,在例項化時,要提供讀取檔案的路徑。例項化streamreader類有很多種方式。下面我羅列出幾種:
複製**
streamreader sr1 = new streamreader(@」c:\temp\a.txt」);
// 同樣也可以指定編碼方式
streamreader sr2 = new streamreader(@」c:\temp\a.txt」, encoding.utf8);
filestream fs = new filestream(@」c:\temp\a.txt」, filemode.open, fileaccess.read, fileshare.none);
streamreader sr3 = new streamreader(fs);
streamreader sr4 = new streamreader(fs, encoding.utf8);
fileinfo myfile = new fileinfo(@」c:\temp\a.txt」);
// opentext 建立乙個utf-8 編碼的streamreader物件
streamreader sr5 = myfile.opentext();
// opentext 建立乙個utf-8 編碼的streamreader物件
streamreader sr6 = file.opentext(@」c:\temp\a.txt」);
複製**
初始化完成之後,你可以每次讀一行,也可以每次讀乙個字元 ,還可以每次讀幾個字元,甚至也可以一次將所有內容全部讀完
複製**
// 讀一行
string nextline = sr.readline();
// 讀乙個字元
int nextchar = sr.read();
// 讀100個字元
int n = 100;
char chararray = new char[n];
int ncharsread = sr.read(chararray, 0, n);
// 全部讀完
string restofstream = sr.readtoend();
使用完streamreader之後,不要忘記關閉它: sr.close();
streamreader sr = file.opentext(@」c:\temp\a.txt」);
string nextline;
while ((nextline = sr.readline()) != null)
sr.close();
寫入txt檔案
寫檔案和讀檔案一樣,如果你要寫入的內容不是很多,可以使用file.writealltext方法來一次將內容全部寫如檔案。如果你要將乙個字串的內容寫入檔案,可以用file.writealltext(filepath) 或指定編碼方式 file.writealltext(filepath, encoding)方法
string str1 = 「good morning!」;
file.writealltext(@」c:\temp\test\a.txt」, str1);
// 也可以指定編碼方式
file.writealltext(@」c:\temp\test\a.txt」, str1, encoding.ascii);
string strs = ;
file.writealllines(@」c:\temp\a.txt」, strs);
// 也可以指定編碼方式
file.writealllines(@」c:\temp\a.txt」, strs, encoding.ascii);
使用file.writealltext或file.writealllines方法時,如果指定的檔案路徑不存在,會建立乙個新檔案;如果檔案已經存在,則會覆蓋原檔案
當要寫入的內容比較多時,同樣也要使用流(stream)的方式寫入
.net為我們封裝了streamwriter類,它以一種特定的編碼向位元組流中寫入字元。streamwriter類的方法同樣也不是靜態方法,所以要使用該類寫入檔案首先要例項化該類,例項化streamwriter類同樣有很多方式:
複製**
// 如果檔案不存在,建立檔案; 如果存在,覆蓋檔案
streamwriter sw1 = new streamwriter(@」c:\temp\a.txt」);
// filemode.createnew: 如果檔案不存在,建立檔案;如果檔案已經存在,丟擲異常
filestream fs = new filestream(@」c:\temp\a.txt」, filemode.createnew, fileaccess.write, fileshare.read);
streamwriter sw3 = new streamwriter(fs);
streamwriter sw4 = new streamwriter(fs, encoding.utf8);
// 如果檔案不存在,建立檔案; 如果存在,覆蓋檔案
fileinfo myfile = new fileinfo(@」c:\temp\a.txt」);
streamwriter sw5 = myfile.createtext();
初始化完成後,可以用streamwriter物件一次寫入一行,乙個字元,乙個字元陣列,甚至乙個字元陣列的一部分
// 寫乙個字元
sw.write(『a』);
// 寫乙個字元陣列
char chararray = new char[100];
sw.write(chararray);
// 寫乙個字元陣列的一部分(10~15)
sw.write(chararray, 10, 15);
同樣,streamwriter物件使用完後,不要忘記關閉。sw.close(); 最後來看乙個完整的使用streamwriter一次寫入一行的例子:
fileinfo myfile = new fileinfo(@」c:\temp\a.txt」);
streamwriter sw = myfile.createtext();
string strs = ;
foreach (var s in strs)
sw.close();
C 文字檔案 txt 讀寫
如果你要讀取的檔案內容不是很多,可以使用 file.readalltext filepath 或指定編碼方式 file.readalltext filepath,encoding 的方法。它們都一次性將文字內容全部讀完,並返回乙個包含全部文字內容的字串 string str1 file.readal...
讀寫文字檔案
讀文字 function readtext filename string string vars string alltext string f textfile begin assignfile f,filename 將c myfile.txt檔案與f變數建立連線,後面可以使用f變數對檔案進行操...
matlab 讀寫txt文字檔案的方法
讀取txt檔案 matlab示例語句 filename,date,timestamp,direction,dayornight,weather,startframe,numframes,class textread info.txt s s s s s s s s s 1 cctv052x20040...