高效率偵測檔案鎖定,避免使用Try/Catch區塊
在程式設計中,判斷檔案是否被鎖定而無需依賴try-catch區塊是一個常見難題。一個可靠的解決方案是使用自訂類別FileManager
來封裝檔案存取操作:
自訂檔案管理器類別:
<code class="language-c#">public class FileManager { ... private FileStream GetStream(FileAccess fileAccess) { int tries = 0; while (true) { try { return File.Open(_fileName, FileMode.Open, fileAccess, FileShare.None); //尝试打开文件 } catch (IOException e) { if (!IsFileLocked(e)) // 检查文件是否被锁定 throw; if (++tries > _numberOfTries) //如果达到最大尝试次数 throw new MyCustomException("文件锁定时间过长: " + e.Message, e); Thread.Sleep(_timeIntervalBetweenTries); //等待后再重试 } } } ... }</code>
檔案鎖定偵測:
<code class="language-c#">private static bool IsFileLocked(IOException exception) { int errorCode = Marshal.GetHRForException(exception) & 0xFFFF; // 获取错误代码 return errorCode == 32; // 检查错误代码是否为32 (共享冲突) }</code>
這種方法允許您以指定的間隔重複嘗試文件訪問,直到文件成功開啟或超過預定的重試次數。透過提供細粒度的檔案鎖定偵測方法,您可以避免try-catch區塊的開銷,同時保持檔案存取操作的健全性和可控性。
以上是如何在不使用 Try-Catch 區塊的情況下有效偵測檔案鎖?的詳細內容。更多資訊請關注PHP中文網其他相關文章!