灰太狼的小祕密
一、資料流基本概念
當希望通過網路傳輸資料,或對檔案資料進行操作時,首先需要將資料化成資料流。資料流是對序列傳輸資料的一種抽象表示。
System.IO下的Stream類是所有資料流的基類,當我們對資料進行逐位元組操作時,首先需要將資料轉換為資料流。C#資料流主要分為三類:FileStream、MemoryStream、NetworkStream,還有常用的StreamReader、StreamWriter和TextWriter類等。
二、檔案操作
1、FIie類
File類支援對檔案的基本操作,包括提供用於建立、複製、刪除、移動和開啟檔案的靜態方法,並協助建立FileStream物件,由於所有的File類的方法都是靜態的,所以如果只進行一個操作,那麼使用File方法的效率比使用File方法的效率高。
知識補充:
靜態方法:C#靜態方法是一種特殊的成員方法 它不屬於類的某一個具體的例項,而是屬於類本身。所以對靜態方法不需要首先建立一個類的例項,而是採用類名.靜態方法的格式 。
(1)static方法是類中的一個成員方法,屬於整個類,即不用建立任何物件也可以直接呼叫! static內部只能出現static變數和其他static方法!而且static方法中還不能使用this....等關鍵字..因為它是屬於整個類! (2)靜態方法效率上要比例項化高,靜態方法的缺點是不自動進行銷燬,而例項化的則可以做銷燬。 (3)靜態方法和靜態變數建立後始終使用同一塊記憶體,而使用例項的方式會建立多個記憶體. (4)C#中的方法有兩種:例項方法,靜態方法.
靜態方法銷燬:主程序銷燬時,記憶體中分配的靜態方法銷燬
2、FileInfo類
FileInfo類與FIie類之間的許多方法的呼叫都是相同的,但是FileInfo類沒有靜態方法,該類中的方法僅可以用於例項化物件。
3、使用方法
(1)判斷檔案是否存在
方一:
File.Exists("C:\\Test.txt");//判讀C盤目錄下是否存在Test.txt類
方二:
FileInfo finfo = new FileInfo("C:\\Test.txt");//建立檔案物件
if(finfo.Exists) //判斷檔案是否存在
{
}
三、流
1、FileStream 檔案流
(1)建立FileStream例項
FileStream fs=new FileStream(string path,FileMode mode,FileAccess access);//檔案所在的流程、檔案建立的方式、檔案的訪問許可權設定
FileInfo類建立FileStream物件的方法
FileStream fs=File.OpenWrite(@"C:\\File1.txt");//以只寫的方式開啟C盤目錄下的File1.txt
FileStream fs=File.OpenRead(@"C:\\File1.txt");//以只讀的方式開啟C盤目錄下的File1.txt
(2)流操作文字檔案
使用I/O流操作文字檔案時主要用到StreamWriter類和StreamReader類。
StreamWriter類:
可以向文字檔案中寫入字串,同時負責重要的準換以及處理向FileStream物件寫入的工作。
saveFileDialog1.Filter = "文字檔案(*.txt)|*.txt";//設定檔案儲存格式
if(saveFileDialog1.ShowDialog()==DialogResult.OK)
{
StreamWriter sw = new StreamWriter(saveFileDialog1.FileName,true);
sw.WriteLine(textBox1.Text);//向建立的檔案中寫入流
sw.Close();//關閉當前寫入流
}
StreamReader類:
用來讀取文字文件的類。
用法:
private void button1_Click(object sender, EventArgs e)
{
openFileDialog1.Filter = "文字檔案(*.txt)|*.txt";//設定檔案的開啟格式
openFileDialog1.ShowDialog();
textBox1.Text = openFileDialog1.FileName;
//此處有Bug,因為Windows系統自己建立的記事本檔案編碼格式為ANSI,而下面讀取時用了UTF8編碼
//改正該程式,需要將UTF8編碼換成預設編碼即可,將Encoding.UTF8替換為Encoding.Default
StreamReader SReader = new StreamReader(textBox1.Text, Encoding.UTF8);
textBox2.Text = SReader.ReadToEnd();//將整個流或從流的當前位置到流的結尾作為字串的讀取
}
2、網路流
當通過網路傳輸資料或對檔案資料進行操作時,需要將資料轉化為資料流的形式。在使用網路流時,資料在網路的各個位置之間以連續的位元組形式傳輸。C#在System.Net.Sockets名稱空間中提供了NetworkStream類用於收發網路資料 。