1.枚舉類FileMode
指定操作系統打開文件的方式
- CreateNew 指定操作系統應創建一個新的文件
- Create 指定操作系統應創建一個新的文件。 如果該文件已存在,則會覆蓋它
- Open 指定操作系統應打開現有文件
- OpenOrCreate 指定操作系統應打開一個文件,是否它存在,則否則,應創建一個新的文件
- Truncate 指定操作系統應打開現有文件。 當打開文件時,應被截斷,以便其大小為零字節
- Append 如果它存在,並且查找到該文件的末尾,或者創建一個新文件,請打開該文件
2.枚舉類FileAccess
對於讀、 寫或讀/寫訪問的文件中定義的常數
- Read 對文件的讀取訪問權限。 可以從文件讀取數據
- Write 對文件的寫入訪問權限。 數據可以寫入該文件
- ReadWrite 讀取和寫入到文件的訪問。 可以寫入和從文件中讀取數據
3.枚舉類FileShare
包含用於控制的訪問其他類型的常數 System.IO.FileStream 對象可以具有相同的文件
- None 拒絕共享當前文件。 在關閉文件之前,任何請求打開的文件 (此進程或另一個進程) 將失敗
- Read 允許以后打開文件進行讀取
- Write 允許以后打開文件進行寫入
- ReadWrite 允許以后打開的文件進行讀取或寫入
- Delete 允許以后刪除文件
- Inheritable 使文件句柄由子進程繼承。 這是不直接支持 Win32
4.FileStream類
FileStream派生於抽象類Stream,Stream抽象類實現了IDisposable接口
常用構造方法:
- FileStream(String 文件路徑,FileMode 文件打開模式)
- FileStream(String 文件路徑,FileMode 文件打開模式,FileAccess 文件訪問方式)
- FileStream(String 文件路徑,FileMode 文件打開模式,FileAccess 文件訪問方式,FileShare 文件共享方式)
常用方法:
- Read() 從流中讀取數據,返回字節數組
- Write() 將字節塊(字節數組)寫入該流
- Seek() 設置文件讀取或寫入的起始位置
- Flush() 清除該流緩沖區,使得所有緩沖的數據都被寫入到文件中
- Close() 關閉當前流並釋放與之相關聯的所有系統資源
屬性:
- CanRead 判斷當前流是否支持讀取,返回bool值,True表示可以讀取
- CanWrite 判斷當前流是否支持寫入,返回bool值,True表示可以寫入
- Position 獲取或設置此流的當前位置
讀取文本文件
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FileStreamTest { class Program { static void Main(string[] args) { using (FileStream fileStream = new FileStream("E:\\source.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite)) { byte[] buff = new byte[1024];//設置內存緩存區大小 while (true) { int r = fileStream.Read(buff, 0, buff.Length); if (r == 0) break; else { string str = Encoding.Default.GetString(buff); Console.Write(str); } } } Console.WriteLine("讀取結束"); Console.ReadLine(); } } }
寫入文本文件
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FileStreamTest { class Program { static void Main(string[] args) { using (FileStream fileStream = new FileStream("E:\\source.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite)) { //將要追加的字符串轉換成字節數組 byte[] byteBuffer = Encoding.Default.GetBytes("你最好!Yeah!"); //設置當前流的位置(如果不設置下面的Position屬性,執行Write方法的時候是從前往后覆蓋) fileStream.Position = fileStream.Length; //寫入文件 fileStream.Write(byteBuffer, 0, byteBuffer.Length); } Console.ReadLine(); } } }