首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# FileStream 操作異常:「請求的操作無法在使用用戶映射區域打開的文件上執行」

     編輯:程式設計綜合問答

錯誤訊息

System.IO.IOException: 請求的操作無法在使用用戶映射區域打開的文件上執行

常見原因

  1. 記憶體對應檔案:使用 `MemoryMappedFile` 建立視圖後,嘗試用 `FileStream` 同步讀寫同一檔案。
  2. 檔案被其他進程鎖定:防毒軟體、索引服務、或另一個 `FileStream` 未關閉。
  3. 網路磁碟/虛擬磁碟:某些網路檔案系統不支援特定 IO 操作。

解決方案

1. 避免混用 MemoryMappedFile 與 FileStream

若已用 `MemoryMappedFile.CreateFromFile`,後續讀寫請透過 `CreateViewStream` 或 `CreateViewAccessor`,不要再 `new FileStream(path)`。

2. 確保 FileShare 正確

using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) {
    // 允許其他進程同時讀寫
}

3. 排查鎖定進程

  • 使用 Resource Monitor (resmon.exe) → CPU → Associated Handles 搜尋檔案路徑。
  • 或工具 Sysinternals Handle:`handle.exe path\to\file`。

4. 延遲重試機制

for (int i = 0; i < 3; i++) {
    try { /* 檔案操作 */ break; }
    catch (IOException) { Thread.Sleep(100); }
}

參考資源

總結

核心在於「同一檔案不可同時以 MemoryMappedFile 與 FileStream 存取」。檢查代碼中是否混用兩種 API,或是否有未 `Dispose` 的流物件。

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