首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# FileStream 進階:檔案模式、存取權限與流繼承體系

     編輯:關於C#

FileStream 是 .NET 檔案 I/O 的核心位元組流,提供隨機存取、鎖定控制、非同步操作等底層能力。本文深入解析 FileMode/FileAccess/FileShare 組合語意、流繼承體系,以及基於流的輸入輸出核心成員。

一、FileMode 開啟模式語意

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);

二、FileAccess 存取權限

  • Read:可讀、可 Seek
  • Write:可寫、可 Seek
  • ReadWrite:可讀寫、可 Seek

建構子:new FileStream(path, FileMode, FileAccess)。權限必須與 FileMode 邏輯一致(如 Append 需 Write)。

三、FileShare 共享模式(關鍵)

正確設定 FileShare 可避免多進程存取衝突,支援日誌檔多進程追寫、資料庫檔案共享等場景。

四、Stream 核心成員(所有流通用)

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 包裝底層流增加功能。

流繼承體系圖

六、FileStream 關鍵特性

  • 隨機存取:Seek/Position 支援任意位置讀寫
  • 內部指標:讀寫操作自動推進 Position
  • 鎖定區域:Lock(position, length)/Unlock() 防止多進程衝突
  • 非同步:ReadAsync/WriteAsync 釋放執行緒
  • 僅處理位元組:文字處理請包裝 StreamReader/Writer

七、現代化建議

  • 簡單讀寫:File.ReadAllBytes/File.WriteAllBytesAsync
  • 大檔串流:File.OpenRead 回傳 FileStream 配合 Pipe 處理
  • 隨機存取:MemoryMappedFile 效能優於 FileStream.Seek
  • 始終使用 using 或 await using 確保釋放

精通 FileStream 模式組合與流體系,是構建高效能、高可靠度檔案處理元件的基礎。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved