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

运行时发生异常时FileStream无法关闭,如何解决?

解决运行时异常导致FileStream无法关闭的问题

你的问题核心是FileStream没有被正确托管释放,一旦中间抛出异常,代码没机会执行Close(),且catch块也访问不到这个局部变量,导致文件句柄一直被占用。解决方法很简单,用using语句包裹FileStream,它会自动帮你处理资源释放,不管有没有异常。

修改后的代码如下:

try
{
    using (ExcelEngine excelEngine = new ExcelEngine())
    {
        // ... 其他代码 ...
        var path = Path.Combine(Directory.GetCurrentDirectory(), @"wwwroot\Data\Temp", userId + ".xlsx");

        // 用using包裹FileStream,自动释放资源
        using (FileStream inputStream = new FileStream(path, FileMode.Open))
        {
            // ... 读取Excel的代码 ...
            // 即使这里发生异常,using也会自动调用inputStream.Dispose()(内部包含Close逻辑)
        }
        // ... 其他代码 ...
    }
}
catch(Exception ex)
{
    // ... 异常处理逻辑 ...
}

为什么这样可行?

using语句是语法糖,会被编译成try-finally块,确保代码块结束(无论正常执行还是抛出异常)时,都会调用对象的Dispose()方法。而FileStream的Dispose()会自动关闭文件流并释放占用的系统资源,无需手动调用Close()。

如果觉得嵌套using不够简洁,也可以将多个对象放在同一层using中(用逗号分隔),嵌套写法可读性会更好:

using (ExcelEngine excelEngine = new ExcelEngine())
using (FileStream inputStream = new FileStream(path, FileMode.Open))
{
    // ... 业务代码 ...
}

这样就能彻底解决异常时文件流无法关闭的问题,不用再重启服务器。

内容的提问来源于stack exchange,提问作者Alex Wright

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 03:52:42