C# 讀寫文件時提示文件占用的解決方法
1.注意使用using和FileShare文件共享選項
public static class FileHelper { public static void WriteAllTextWithShare(string path, string content) { using (var sw = new StreamWriter( new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read))) { sw.Write(content); } } public static string ReadAllTextWithShare(string path) { using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) using (var sr = new StreamReader(fs)) { return sr.ReadToEnd(); } } } // 使用方式 FileHelper.WriteAllTextWithShare(filePath, content); var text = FileHelper.ReadAllTextWithShare(filePath);
2.原子文件替換
public static void AtomicReplaceFile(string filePath, string newContent) { string tempFile = Path.Combine(Path.GetDirectoryName(filePath), Path.GetRandomFileName()); try { // 1. 將新內容寫入臨時文件 File.WriteAllText(tempFile, newContent, Encoding.UTF8); // 2. 備份原始文件(可選) string backupFile = filePath + ".bak"; if (File.Exists(filePath)) { File.Replace(tempFile, filePath, backupFile, ignoreMetadataErrors: true); } else { File.Move(tempFile, filePath); } } catch (Exception ex) { // 3. 發生錯誤時清理臨時文件 if (File.Exists(tempFile)) { try { File.Delete(tempFile); } catch { /* 忽略清理錯誤 */ } } throw new IOException($"原子替換文件失敗: {ex.Message}", ex); } }
3.確保文件在所有讀寫處均被正確釋放
本文遇到的問題是在一處不顯眼的地方進行了File.Create,導致以上所有方法都失效。。。

浙公網安備 33010602011771號