FileStream 是 .NET 檔案 I/O 的核心位元組流,提供隨機存取、鎖定控制、非同步操作等底層能力。本文深入解析 FileMode/FileAccess/FileShare 組合語意、流繼承體系,以及基於流的輸入輸出核心成員。
| FileMode | 行為 | 適用場景 |
|---|---|---|
Create | 建立新檔,覆蓋同名舊檔 | 產生輸出檔 |
CreateNew | 建立新檔,若存在則拋異常 | 避免意外覆蓋 |
Open | 開啟現有檔,不存在拋異常 | 讀取設定檔 |
OpenOrCreate | 開啟現有或建立新檔 | 日誌檔案 |
Truncate | 開啟現有檔並清空內容 | 重置資料檔 |
Append | 開啟並定位至末尾(需配合 Write) | 追加日誌 |
// 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);
Read:可讀、可 SeekWrite:可寫、可 SeekReadWrite:可讀寫、可 Seek建構子:new FileStream(path, FileMode, FileAccess)。權限必須與 FileMode 邏輯一致(如 Append 需 Write)。
| FileShare | 允許其他開啟 | |
|---|---|---|
None | 獨佔(預設) | |
Read | 讀取 | |
Write | 寫入 | |
ReadWrite | 讀寫 | |
Delete | 刪除 | |
Inheritable | 子進程繼承控制代碼 |
| 成員 | 類型 | 說明 |
|---|---|---|
Close() | 方法 | 關閉流、釋放資源 |
Flush() | 方法 | 清空寫入緩衝區 |
ReadByte() | 方法 | 讀單位元組,結束回傳 -1 |
Read(byte[], offset, count) | 方法 | 讀取位元組塊,回傳實際讀取數 |
WriteByte(byte) | 方法 | 寫單位元組 |
Write(byte[], offset, count) | 方法 | 寫入位元組塊 |
Seek(offset, origin) | 方法 | 移動位置指標 |
Position | 屬性 | 當前位置(可讀寫) |
Length | 屬性 | 流長度 |
CanRead/CanWrite/CanSeek | 屬性 | 能力查詢 |
Stream (抽象基類)
├── FileStream // 檔案位元組流
├── MemoryStream // 記憶體位元組流
├── BufferedStream // 緩衝包裝流
├── NetworkStream // 網路通訊流
├── CryptoStream // 加密轉換流
├── GZipStream/DeflateStream // 壓縮流
└── PipeStream // 匿名/具名管道流
裝飾器模式:BufferedStream、CryptoStream、GZipStream 包裝底層流增加功能。

Seek/Position 支援任意位置讀寫PositionLock(position, length)/Unlock() 防止多進程衝突ReadAsync/WriteAsync 釋放執行緒StreamReader/WriterFile.ReadAllBytes/File.WriteAllBytesAsyncFile.OpenRead 回傳 FileStream 配合 Pipe 處理MemoryMappedFile 效能優於 FileStream.Seekusing 或 await using 確保釋放精通 FileStream 模式組合與流體系,是構建高效能、高可靠度檔案處理元件的基礎。