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

C#同一进程中用两个FileStream打开文件报错如何解决?

文件被占用错误的原因及修复方案

错误原因

问题出在两个FileStream的共享权限不兼容:

  • 第一个流以FileAccess.Write打开文件,同时设置FileShare.Read——这个参数的含义是:允许后续打开该文件的请求拥有读权限,但当前流自身处于只写状态。
  • getChecksum里的第二个流以FileAccess.Read打开,设置的FileShare.Read表示:该流打开后,后续其他请求仅能读取文件。但此时第一个流已经以写权限占用了文件,第二个流的FileShare.Read没有允许已存在的写操作,系统判定权限冲突,因此抛出“文件被其他进程占用”的错误。

简言之:第二个流的共享规则没有包容第一个流的写权限,导致无法正常打开文件。

修复方案

修改getChecksum方法中FileStream的FileShare参数为FileShare.ReadWrite,让它允许已存在的流拥有写权限:

public long getChecksum(string source){
    using (var fs = new FileStream(source, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)){
        // 这里编写计算校验和的逻辑
    }
}

修改后,第二个流打开时会兼容第一个流的写操作,就能正常读取文件计算校验和了。

补充说明:FileShare参数的核心作用是定义当前流打开后,允许其他后续打开请求拥有的权限,同时必须兼容已存在的流的访问权限。当已有流持有写权限时,新打开的流必须在FileShare中包含Write,才能成功打开文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 22:57:29