C#文件操作(二)

一、文件讀寫基本概念

在之前介紹的C#文件操作(一)介紹過有關文件或文件夾等相關操作。今天我們講解一下文件讀寫中涉及的一些概念。

1、背景
應用程序運行過程中,把文件從磁盤加載到內存中的過程叫做文件的讀操作或輸入操作;而把文件從內存中存儲到磁盤中的操作稱之爲寫操作或輸出操作。

在System.IO命名空間中存在的文件流大多有以下幾種。Stream類、FileStream類、StreamWriter類、StreamReader類、BinaryReader類、BinaryWriter類。

其中Stream類是所有文件流類的基類。
其中FileStream類提供了在文件彙總的讀寫***字節***的方法。
其中StreamReader和StreamWriter類用來對文件進行***文本模式***的讀寫
其中BinaryReader和BinaryWriter類用來對文件進行***二進制文件***的讀寫。

二、FileStream類

1、FileStream類主要提供的讀取字節的方法,所以它可以輕鬆的學些AscII碼,也就是文本文件。它支持字節和字節數組的處理。FileStream類的構造函數有很多,其中常用的幾種構造函數如下:
public FileStream(string path,FileMode mode); //路徑,訪問模式
public FileStream(string path,FIleMode mode,FileAccess acess); //路徑,訪問模式,訪問權限

其中FileMode是枚舉類型,主要有以下幾個選項
Append //如果文件存在,就打開,並從文件末尾開始從操作
Create //創建新文件,如果存在這樣的文件,就覆蓋它
CreateNew //創建新文件,如果存在就報錯
Open //如果存在,就打開,否則報錯
OpenCreate //如果存在就打開,否則就創建後打開
Truncate //打開現有文件,清楚內容,然後可以項文件中寫入全新的數據,但是保留文件的初始化創建日期,如果不
//存在

其中FIleAcess是訪問的權限,主要有以下幾個選項
Read、Write、ReadWrite

2、FileStream類的創建成員及其說明
CanWrite //可寫
CanRead //可讀
Length //流長度
Position //流的當前位置
FIleStream //構造函數
Close //關閉流
Flush //清除該流所有緩衝區,使所有緩衝區的數據被寫入磁盤中
Read //從流中讀取字節塊並將該數據寫入給定的緩衝區中
ReadByte //從文件中讀取一個字節,並將讀取位置提升一個字節
Seek //設置當前流的讀寫位置,需要指定偏移字節和起始位置。起始位置在枚舉System.IO.SeekOrigin中定義。有
//三個可選值,Begin、Current、End
Write //使用從緩衝區讀取的數據將字節塊寫入該流
WriteByte //將一個字節寫入文件流的當前位置

3、FileStream使用場合
由於FileStream類是專門正對字節進行操作的,所以它處理起來比較繁瑣,不能直接處理字符串。但是正因爲它的面向字節的特性,使得FileStream類可以處理任何數據文件,而不僅僅是文本文件,通過讀取字節數據就可以讀取類似圖像、聲音的文件。所以它比較靈活。通常來說處理文本文件一般不會使用FileStream, 而選擇使用StreamReader或StreamWriter類。

4、FileStream類的使用範例

OpenFileDialog myFileDialog = new OpenFileDialog();                //創建一個文件對話框
myFileDialog.Filter = "文本文件(*.txt)|*.txt|音樂文件(*.mp3)|*.mp3";   //設置文件過濾,可選擇的有文本文件,音樂文件
myFileDialog.ShowDialog();                                         //顯示對話框
string path = myFileDialog.FileName;                               //獲取選擇的文件
FileStream fs = new FileStream(path,FileMode.Open);                //創建文件流
byte[] byt = new byte[1024];                                       //設置好字節數組用於獲取文件彙總的字節信息
while (fs.Read(byt, 0, byt.Length) > 0)                            //每1024個字節的讀取出來
{ 
    Console.WriteLine(Encoding.Default.GetString(byt));            //再講字節數組進行編碼轉換成字符串
}

由上面的例子我們可以看出,FileStream類處理文本文件比較繁瑣,他只能讀取字節,想要轉換成字符串還要進行編碼纔可以。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章