编辑XML内容后遭遇文件占用错误,求C#解决方案
文件占用错误的解决方案
问题根源分析
你的代码中存在几处导致文件被占用的问题:
- 手动调用
Close()和Dispose()与using块的自动资源管理冲突,可能引发资源释放异常 - 第一个文件流使用了不必要的
ReadWrite权限,增加了文件锁定概率 MemoryStream未通过using管理,手动释放时机容易出错- 读取文件内容时使用
ASCII编码,可能破坏XML的UTF8编码结构,同时也可能间接导致流资源未正确释放
修正后的代码
var regex = new Regex(@"[^\x09\x0A\x0D\x20-\xD7FF\xE000-\xFFFD\x10000-\x10FFFF]", RegexOptions.Compiled); // 用using自动管理MemoryStream资源 using var memStream = new MemoryStream(); // 只读模式打开文件,最小化权限占用 using (var readStream = File.Open(file.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { readStream.CopyTo(memStream); } // 创建模式写入文件,using自动释放写入流 using (var writeStream = File.Open(file.FullName, FileMode.Create, FileAccess.Write, FileShare.ReadWrite)) { memStream.Position = 0; // 重置流指针到起始位置,确保读取完整内容 var text = Encoding.UTF8.GetString(memStream.ToArray()); var result = regex.Replace(text, string.Empty); byte[] bArray = Encoding.UTF8.GetBytes(result); writeStream.Write(bArray, 0, bArray.Length); } // 写入流已完全释放,安全读取文件内容 string xml = File.ReadAllText(file.FullName);
额外注意事项
- 确认
xmlFile.FullName与file.FullName是否指向同一文件,若为不同文件,需检查其他代码是否未释放xmlFile的关联流 - XML文件建议统一使用UTF8编码处理,避免编码转换导致的内容损坏或资源异常
- 始终通过
using块管理流资源,避免手动调用Close()/Dispose()引发的资源泄漏
内容的提问来源于stack exchange,提问作者Acolak
相关产品推荐
相关产品推荐

