Dateisperren effizient erkennen und die Verwendung von Try/Catch-Blöcken vermeiden
Bei der Programmierung ist es ein häufiges Problem, festzustellen, ob eine Datei gesperrt ist, ohne sich auf Try-Catch-Blöcke zu verlassen. Eine zuverlässige Lösung besteht darin, eine benutzerdefinierte Klasse FileManager
zu verwenden, um Dateizugriffsvorgänge zu kapseln:
Benutzerdefinierte Dateimanagerklasse:
<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>
Erkennung von Dateisperren:
<code class="language-c#">private static bool IsFileLocked(IOException exception) { int errorCode = Marshal.GetHRForException(exception) & 0xFFFF; // 获取错误代码 return errorCode == 32; // 检查错误代码是否为32 (共享冲突) }</code>
Mit dieser Methode können Sie den Dateizugriff in bestimmten Intervallen wiederholt versuchen, bis die Datei erfolgreich geöffnet wurde oder die vorgegebene Anzahl von Wiederholungsversuchen überschritten wird. Durch die Bereitstellung einer feinkörnigen Methode zur Erkennung von Dateisperren können Sie den Mehraufwand von Try-Catch-Blöcken vermeiden und gleichzeitig die Dateizugriffsvorgänge robust und kontrollierbar halten.
Das obige ist der detaillierte Inhalt vonWie kann ich Dateisperrungen effizient erkennen, ohne Try-Catch-Blöcke zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!