1. 程式人生 > >灰太狼的小祕密

灰太狼的小祕密

一、資料流基本概念

當希望通過網路傳輸資料,或對檔案資料進行操作時,首先需要將資料化成資料流。資料流是對序列傳輸資料的一種抽象表示。

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類用於收發網路資料 。