如何正确处理 .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;
}
很显然这种用异常来分流业务逻辑,这是一种不推荐的做法,性能也是非常低,上面两位大佬也给了自己的意见,大家可以根据具体场景使用。
如何正确处理 .NET 文件的 `File in use by another process` 异常 ?相关推荐
- 正确的WordPress文件权限[关闭]
本文翻译自:Correct file permissions for WordPress [closed] I've had a look over here but didn't find any ...
- JAVA SE学习day_03:包装类、文件操作——file
一.包装类 包装类是为了解决基本类型不能直接参与面向对象开发的问题,实际就是将基本类型以"对象"的形式表示 Integer 1.1基本类型转换为对应的包装类(引用类型) int i ...
- 【转】Android必备知识点- Android文件(File)操作
Android 使用与其他平台上基于磁盘的文件系统类似的文件系统. 本文讲述如何使用 Android 文件系统通过 File API 读取和写入文件. File 对象适合按照从开始到结束的顺序不跳过地 ...
- android读写删file,Android文件(File)操作
Android 使用与其他平台上基于磁盘的文件系统类似的文件系统. 本文讲述如何使用 Android 文件系统通过 File API 读取和写入文件. File 对象适合按照从开始到结束的顺序不跳过地 ...
- C#文件操作 File(静态类)
操作某一个文件/文件夹,需要一个文件的完整路径 一.使用File的静态方法进行文件操作 1 2 3 4 5 6 7 8 9 //使用file的静态方法进行复制 File.Cop ...
- python计算文件md5值_用python 正确计算大文件md5 值
python 计算文件的md5值很方便,但如果只是简单的把文件都入到内存中,大文件会导致问题,一般采用切片的方式分段计算,下面的几个函数可以很好的解决这个问题. 使用 hashlib import h ...
- python写文件读文件-Python 读写文件和file对象的方法(推荐)
1.open 使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open('thefile.tx ...
- Python编程基础:第三十节 文件检测File Detection
第三十节 文件检测File Detection 前言 实践 前言 我们通常会涉及到文件相关的操作,例如检测.读写.复制.删除等等.本节我们一起来学习文件检测相关知识,即检测指定路径下是否存在该文件. ...
- 路径问题(如何正确写出文件路径)
package star.july;import java.io.IOException; import java.io.PrintWriter;import javax.servlet.Servle ...
最新文章
- js事件(Event)知识整理
- 499php,一笔画仙路 [499]第499章 神器的威力 最新章节无弹窗全文免费阅读 乐文阅读官网...
- 华为oj平台的新网址
- Python词云 wordcloud 十五分钟入门与进阶
- boost::spirit模块实现错误处理的测试程序
- 在diy的文件系统上创建文件的流程
- xp系统debugger用户_xp系统BIOS恢复出厂设置开机需按F1的具体步骤--win10专业版
- Java可变引用,Java – 对可变对象的易失性引用 – 对对象的字段的更新对所有线程都是可见的...
- 教你动手做一个 iOS 越狱 app
- 矩阵横向输出_Python3算法之八:矩阵螺旋遍历
- 使用CXF 来发布一个 service
- diff与patch操作
- linux扫描仪如何使用方法,怎样在linux下设置和使用扫描仪.doc
- 练习京东顶部导航条、背景、渐变、按钮练习(雪碧图)、渐变
- ASP程序性能测试报告
- python所有字母大写_在python中将所有字母改为大写
- 【css】svg修改图标颜色
- 正在工作的程序员,生活状态都很苦逼?
- 全国青少年编程等级考试python一级真题2020年6月(含题库答题软件账号)
- 2022年中国互联网数据中心(IDC)行业产业链及市场现状分析(附国家绿色数据中心公示名单)[图]