一、File.Open 靜態工廠方法:快速建立 FileStream
// 1. 唯讀開啟現有檔案
FileStream fs1 = File.Open(@"C:\test.txt", FileMode.Open);
// 2. 附加模式,唯寫
FileStream fs2 = File.Open(@"C:\test.txt", FileMode.Append, FileAccess.Write);
// 3. 截斷模式,讀寫共享讀取
FileStream fs3 = File.Open(@"C:\test.txt", FileMode.Truncate, FileAccess.ReadWrite, FileShare.Read);
// 4. 建立新檔(覆寫既有)
FileStream fs4 = new FileStream(@"C:\Testing.txt", FileMode.Create);
二、FileMode 完整語意對照表
| 值 | 行為描述 | 檔案不存在 | 檔案存在 |
CreateNew | 建立新檔,嚴格禁止覆寫 | 建立 | 擲 IOException |
Create | 建立或覆寫 | 建立 | 截斷為 0 |
Open | 開啟現有檔案 | 擲 FileNotFoundException | 開啟 |
OpenOrCreate | 開啟或建立 | 建立 | 開啟 |
Truncate | 開啟並清空內容 | 擲例外 | 截斷為 0 |
Append | 開啟並移至末尾 | 建立 | 移至末尾 |
三、FileAccess 權限與 FileShare 共享模式
FileAccess
| 值 | 允許操作 |
Read | 讀取 |
Write | 寫入 |
ReadWrite | 讀寫 |
FileShare(控制其他程序同時存取)
| 值 | 允許其他程序 |
None | 獨佔,拒絕所有共享 |
Read | 允許讀取 |
Write | 允許寫入 |
ReadWrite | 允許讀寫 |
Delete | 允許刪除 |
Inheritable | 允許子程序繼承控制代碼 |
// 典型:讀寫自己,允許他人讀取
FileStream fs = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read);
四、Stream 抽象基類核心契約
| 方法/屬性 | 簽名 | 說明 |
| Read | int Read(byte[] buffer, int offset, int count) | 讀取位元組到緩衝區,回傳實際讀取數 |
| ReadByte | int ReadByte() | 讀取單一位元組,結尾回傳 -1 |
| Write | void Write(byte[] buffer, int offset, int count) | 從緩衝區寫入位元組 |
| WriteByte | void WriteByte(byte value) | 寫入單一位元組 |
| Seek | long Seek(long offset, SeekOrigin origin) | 設定指標位置 |
| Position | long Position { get; set; } | 目前指標位置 |
| Length | long Length { get; } | 串流長度 |
| Flush | void Flush() | 清除緩衝區 |
| Close | void Close() | 關閉串流(呼叫 Dispose) |
| CanRead | bool CanRead { get; } | 是否支援讀取 |
| CanWrite | bool CanWrite { get; } | 是否支援寫入 |
| CanSeek | bool CanSeek { get; } | 是否支援定位 |
五、Stream 繼承階層完整圖解

- Stream → 抽象基類
- FileStream → 檔案
- MemoryStream → 記憶體
- BufferedStream → 緩衝裝飾器
- NetworkStream → 網路
- CryptoStream → 加密轉換
- GZipStream/DeflateStream → 壓縮
- PipeStream → 匿名/具名管道
六、實務選擇指南
- 文字檔:
StreamReader/Writer(編碼處理)
- 二進位結構:
BinaryReader/Writer 或 FileStream 直接操作
- 大檔案隨機存取:
FileStream + Seek
- 記憶體高速暫存:
MemoryStream
- 網路傳輸:
NetworkStream 或 HttpClient
- 加密/壓縮:
CryptoStream / GZipStream 套疊在基礎串流上
總結
FileMode 決定檔案開啟/建立/截斷語意,FileAccess 限制自身權限,FileShare 協調跨程序並發存取。Stream 抽象基類統一了所有 I/O 裝置的操作介面,透過裝飾器模式(BufferedStream、CryptoStream、GZipStream)實現功能組合。精通這三組列舉與串流架構,是處理高可靠度、高效能檔案 I/O 的前提。