如何正确处理 .NET 文件的 `File in use by another process` 异常 ?

咨询区

  • Dawsy

我的项目中有一个需求,它需要不断的访问一个文件,很多时候这个访问逻辑都是正常的,但有时候访问太快,会抛出如下异常:

"File in use by another process"

为了能找到其解决方案,我翻遍了google,我发现几乎所有的方式都是用 try,catch 来判断,我是一个有代码洁癖的人,我希望寻找一种更高效的方式。

回答区

  • Community

如果不想用 try catch 判断异常类型的话,可以在 Open 文件的时候使用 FileModel.OpenOrCreate 枚举,希望对你有帮助。参考如下代码:

static void Main(string[] args){string filePath = "C:\\Documents And Settings\\yourfilename";bool isFileInUse;isFileInUse = FileInUse(filePath);// Then you can do some checkingif (isFileInUse)Console.WriteLine("File is in use");elseConsole.WriteLine("File is not in use");}static bool FileInUse(string path){try{using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate)){return fs.CanWrite;}}catch (IOException ex){return true;}}
  • Karl Johan

你可以使用 FileSystemWatcher 的 Change 事件去监控文件的更变,我虽然没用过这个类,但我觉得在非 try catch 情况下可以值得一试,如果频繁的写入对 FileSystemWatcher 有过大负载的话,建议还是切回到 try catch 上。

点评区

其实常规做法就是将业务代码通过 try catch 包裹起来,然后在 catch 中判断是否存在文件被使用,简单粗暴,比如下面这段代码:

protected virtual bool IsFileLocked(FileInfo file)
{try{using(FileStream stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.None)){stream.Close();}}catch (IOException){return true;}return false;
}

很显然这种用异常来分流业务逻辑,这是一种不推荐的做法,性能也是非常低,上面两位大佬也给了自己的意见,大家可以根据具体场景使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/297899.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

live555学习笔记7-RTP打包与发送

七 RTP打包与发送rtp传送开始于函数:MediaSink::startPlaying()。想想也有道理,应是sink跟source要数据,所以从sink上调用startplaying(嘿嘿,相当于directshow的拉模式)。看一下这个函数:Boole…

ASCII 说明

Bin Dec Hex 缩写/字符 解释 0000 0000 0 00 NUL(null) 空字符 0000 0001 1 01 SOH(start of handing) 标题开始 0000 0010 2 02 STX (start of text) 正文开始 0000 0011 3 03 ETX(end of text) 正文结束 0000 0100 4 04 EOT(end of transm…

开源Math.NET基础数学类库使用(04)C#解析Matrix Marke数据格式

原文:【原创】开源Math.NET基础数学类库使用(04)C#解析Matrix Marke数据格式开源Math.NET基础数学类库使用系列文章总目录: 1.开源.NET基础数学计算组件Math.NET(一)综合介绍 2.开源.NET基础数学计算组件Math.NET(二)矩阵向量计算 3.开源.NET基础数学计算组件Ma…

元胞自动机模型_【ABM仿真模拟】第三章 元胞自动机 B

是新朋友吗?记得先点蓝字关注我哦~第三章 元胞自动机 B2020/01/233.3投票模型(Voting) 课程导读无论是国内国外,投票结果的预测都异常受到关注。在众多唐斯模型、中间选民模型 、以及Sznajd模型中,投票模型作为典型的元胞自动机&a…

喜报!985大学首次登上Nature封面,这所学校可太不容易了!

全世界只有3.14 % 的人关注了爆炸吧知识建校64年来,第一次登上期刊封面又一所985院校出息了!伦敦时间6月4号,《Nature》刊发了电子科技大学邓旭教授团队的最新研究成果,并被选为当期封面。《设计坚固的超疏水表面》《Nature》作为…

getbean方法找不到bean_iphone手机静音找不到怎么办 iphone静音找不到解决方法【图文】...

一个网友给小编留言,询问:“我的iphone调静音了现在找不到,有什么工具能找到”这一个问题,因此,在今天的iPhone使用教程,小编就给大家讲解一下具体的解决方法,那么,iphone手机静音找…

Web使用热敏打印小票(IE环境)

概述在html页下使用Epson P60II 热敏纸下打印小票&#xff0c;使用的打印方案为调用window.print()。代码实现1、定义窗体&#xff0c;设置宽度和高度<body onload"window.external.Print(0,0);" style"margin-top:0px;" ><form id"form1&qu…

linux配置ip地址 routes,CentOS 7 设置网络IP地址(示例代码)

CentOS 7 设置网络IP地址自动获得IP地址1&#xff0c;CentOS 7自动获得一个IP地址[[email protected] ~]# dhclient2&#xff0c;查看网卡信息&#xff0c;会发现有一个ens33的网卡[[email protected] ~]# ip addr1: lo: mtu 65536 qdisc noqueue state UNKNOWN qlen 1link/loo…

一些鲜为人知的编程事实(省身)

David Veksler曾发表过一篇博文《Some lesser-known truths about programming》&#xff0c;列出了一些鲜为人知的编程事实&#xff0c;这些事实是什么呢&#xff1f;酷壳个人网站楼主陈皓对此文进行了翻译&#xff0c;全文如下&#xff1a; 我的程序员经历让我明白了一些关于…

Android推送通知指南(转)

在开发Android和iPhone应用程序时&#xff0c;我们往往需要从服务器不定的向手机客户端即时推送各种通知消息&#xff0c;iPhone上已经有了比较简单的和完美的推送通知解决方案&#xff0c;可是Android平台上实现起来却相对比较麻烦&#xff0c;最近利用几天的时间对Android的推…

成长 | 《大厂晋升指南》学习总结(上)

【学习总结】| Edison Zhou温馨提示&#xff1a;文中的贴图均来自极客时间《大厂晋升指南》课程。0写在开头今年加入了一家产业互联网平台企业&#xff0c;公司刚好也开始借鉴阿里的职级体系。对于从来没有在互联网企业呆过的我&#xff0c;对于职级体系还比较陌生&#xff0c;…

vue路由上的#/怎么去掉_如何去掉vue路由中的#

通过脚手架vue-cli构建的项目&#xff0c;在项目启动后&#xff0c;URL地址上都会带有#&#xff0c;如&#xff1a;http://localhost:8080/#/father原因&#xff1a;这是因为vue-router 默认hash模式&#xff0c; 使用 URL 的 hash 来模拟一个完整的 URL&#xff0c;于是当 URL…

python3读取文件夹-python3获取文件及文件夹大小

Help on function walk inmodule os: walk(top, topdownTrue, οnerrοrNone, followlinksFalse) Directory tree generator. For each directoryinthe directory tree rooted at top (including top itself, but excluding"." and ".."), yields a 3-tupl…

String,StringBuffer与StringBuilder的区别

2019独角兽企业重金招聘Python工程师标准>>> String 字符串常量StringBuffer 字符串变量&#xff08;线程安全&#xff09;StringBuilder 字符串变量&#xff08;非线程安全&#xff09; 简要的说&#xff0c; String 类型和 StringBuffer 类型的主要性能区别其实在…

68张机械原理动图,够你看一晚上了!

全世界只有3.14 % 的人关注了爆炸吧知识机械动态图有的可以洞察工作原理&#xff0c;有的可以洞察结构&#xff0c;有的可以表达工作过程&#xff0c;不学机械的也能看得懂&#xff01;今天的68幅动态图总有一些你没有见过&#xff0c;相当棒&#xff01;一、制造篇一张图告诉你…

STB 上Linux软件系统解决方案

近年来&#xff0c;国内巨大的STB潜在市场&#xff0c;吸引了包括芯片厂商、CA厂商、中间件供应商、机顶盒生产厂商等厂家的热情&#xff0c;围绕STB的竞争全面展开。 机顶盒是一种专用设备&#xff0c;包括软件模块和硬件模块。软件模块包括系统引导程序、嵌入式操作系统和应用…

coreldraw带圈字符_coreldraw中如何使字体围绕一个圆形排列?

展开全部方法一2113&#xff1a;使用“使文5261本适合路径”命令步骤1&#xff1a;打4102好所需文1653字&#xff0c;并版选择工具箱中“权椭圆工具”按住Ctrl键&#xff0c;拖动鼠标绘制出一个正圆形。步骤2&#xff1a;选中文字&#xff0c;执行菜单栏“文本>使文本适合路…

Android 说说亮屏锁和键盘锁

Android中的两把锁 – WalkLock and KeyguardLock 详细分析WalkLock – 顾名思义 唤醒锁 点亮屏幕用的KeyguardLock – 顾名思义 键盘锁 解锁键盘用的详细介绍&#xff1a;1&#xff1a; WalkLock 唤醒锁WalkLock真的能点亮屏幕吗&#xff1f;答案是肯定的。 可是有时候为什么不…

频谱分析幅值单位_案例分享丨某水泥厂入窑斗提减速机不对中故障分析及处理...

斗式提升机是利用均匀固接于无端奉引构件上的一系列料斗,竖向提升物料的连续输送机械。分为环链、板链和皮带三种。今天因大师将给大家分享一个水泥厂的入窑斗提减速机不对中故障的诊断案例。1 设备概况设备基本信息&#xff1a;设备位置&#xff1a;1#产线入窑斗提&#xff08…

中国高校鄙视链指南

全世界只有3.14 % 的人关注了爆炸吧知识某一天&#xff0c;中国各大高校齐聚一堂&#xff0c;开了一场“拒绝高校鄙视链座谈会”&#xff0c;誓要消除高校之间的不平等&#xff0c;不让莘莘学子因为母校问题而被人低看一眼&#xff0c;遗憾终生。首先主持人介绍清华北大发言&am…