You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编辑XML内容后遭遇文件占用错误,求C#解决方案

文件占用错误的解决方案

问题根源分析

你的代码中存在几处导致文件被占用的问题:

  1. 手动调用Close()和Dispose()与using块的自动资源管理冲突,可能引发资源释放异常
  2. 第一个文件流使用了不必要的ReadWrite权限,增加了文件锁定概率
  3. MemoryStream未通过using管理,手动释放时机容易出错
  4. 读取文件内容时使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 08:01:44