[C#.Net]判断文件是否被占用的两种方法
第一种方法:API
1 using System.IO; 2 using System.Runtime.InteropServices; 3 4 [DllImport("kernel32.dll")] 5 public static extern IntPtr _lopen(string lpPathName, int iReadWrite); 6 7 [DllImport("kernel32.dll")] 8 public static extern bool CloseHandle(IntPtr hObject); 9 10 public const int OF_READWRITE = 2; 11 public const int OF_SHARE_DENY_NONE = 0x40; 12 public readonly IntPtr HFILE_ERROR = new IntPtr(-1); 13 private void button1_Click(object sender, EventArgs e) 14 { 15 string vFileName = @"c:\temp\temp.bmp"; 16 if (!File.Exists(vFileName)) 17 { 18 MessageBox.Show("文件都不存在!"); 19 return; 20 } 21 IntPtr vHandle = _lopen(vFileName, OF_READWRITE | OF_SHARE_DENY_NONE); 22 if (vHandle == HFILE_ERROR) 23 { 24 MessageBox.Show("文件被占用!"); 25 return; 26 } 27 CloseHandle(vHandle); 28 MessageBox.Show("没有被占用!"); 29 }
第二种方法:FileStream
1 public static bool IsFileInUse(string fileName) 2 { 3 bool inUse = true; 4 5 FileStream fs = null; 6 try 7 { 8 9 fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, 10 11 FileShare.None); 12 13 inUse = false; 14 } 15 catch 16 { 17 } 18 finally 19 { 20 if (fs != null) 21 22 fs.Close(); 23 } 24 return inUse;//true表示正在使用,false没有使用 25 }
VB.Net
1 Sub Prepare()2 If File.Exists(logRW) Then File.Delete(logRW)3 Dim bflag As Boolean = False4 Try5 Do6 Shell("CMD.exe /C RW.exe /Command=LimitA.rw /LogFile=LimitA.log", AppWinStyle.Hide, True, 5000)7 Threading.Thread.Sleep(1000)8 While (IsFileInUse("LimitA.log"))9 Threading.Thread.Sleep(2000) 10 End While 11 12 If File.Exists(logRW) Then 13 Dim All As String = My.Computer.FileSystem.ReadAllText(logRW) 14 '检查LogRW的0x01的位置的值是否为0x08 15 If All.Contains("Read EC Byte 0x01 = 0x80") Then 16 bflag = True 17 End If 18 End If 19 Loop Until bflag 20 21 Using sr As New StreamReader(logRW) 22 Do Until sr.EndOfStream 23 Dim s As String = sr.ReadLine 24 If s.Contains("Set Environment RwLOCAL3") Then 25 'Set Environment RwLOCAL3 = 4608 (DEC) 26 LimitA = CDbl(s.Split(New String() {"=", "("}, StringSplitOptions.RemoveEmptyEntries)(1)) 27 Console.WriteLine("Limit Current: " & LimitA) 28 LogStr = LogStr & vbCrLf & "Limit Current: " & LimitA 29 Exit Do 30 End If 31 Loop 32 End Using 33 34 Catch ex As Exception 35 Console.WriteLine(ex.Message & Err.Description) 36 Environment.Exit(1) 37 End Try 38 End Sub 39 40 Function IsFileInUse(ByVal fileName As String) 41 Dim inUse As Boolean = True 42 Dim fs As FileStream = Nothing 43 Try 44 fs = New FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.None) 45 inUse = False 46 Catch ex As Exception 47 48 Finally 49 If (fs IsNot Nothing) Then 50 fs.Close() 51 End If 52 End Try 53 Return inUse 54 End Function
转载于:https://www.cnblogs.com/yanglang/p/6867601.html
[C#.Net]判断文件是否被占用的两种方法相关推荐
- 判断文件是否被占用的两种方法
今天开发产线测试Tool时发现日志文件会几率性的被占用,上网浏览找到最简单的代码(API或者FileStream),在这里抛砖引玉下. 第一种方法:API 1 using System.IO; 2 u ...
- python获取绝对路径_python3中获取文件当前绝对路径的两种方法
方法1: import sys print(sys.argv) 得到文件当前绝对路径字符串的一个列表 ['D:/pycharm/PracticeProject/ClientServerNetworki ...
- 让Mac复制文件到U盘的两种方法
2019独角兽企业重金招聘Python工程师标准>>> 让Mac复制文件到U盘的两种方法 一.让Mac支持ntfs格式磁盘 下载安装tuxera ntfs这款Mac读写软件,然后在系 ...
- oracle 判断是否位汉字,js判断字符是否是汉字的两种方法小结
有时需要判断一个字符是不是汉字,比如在用户输入含有中英文的内容时,需要判断是否超过规定长度就要用到.用 Javascript 判断通常有两种方法. 1.用正则表达式判断 js判断字符是否是汉字 .co ...
- android判断应用是否回到桌面的两种方法
有时候需要判断APP是否被切换到后台,然后做相应处理,如显示悬浮窗等.怎么判断呢,有两种方法: 第一种: /*** 判断当前界面是否是桌面*/private boolean isHome() {Str ...
- PPT文件设置打开密码的两种方法
PPT文件设置了打开密码加密,可以保护重要文件内容,今天介绍两种加密PPT文件的方法: 第一种: 点击工具栏中的[文件] 然后点击[信息]-[保护演示文稿]-[用密码进行加密] 然后输入密码,就完成了 ...
- 判断是否是回文字符串两种方法
判断回文字符串的两种方法 public class JudgingPalindrome {public static void main(String[] args) {solution01();Sy ...
- 去除idea中mapper文件中的黄色背景两种方法
一共提供两种方法: 第一种是直接取消验证颜色 第二种是连接数据库设置方言 原效果图: 第一种 步骤:settings->Editor->Inspection,然后取消以下两个勾选 下一步: ...
- 将word文件转换成PDF的两种方法
由于工作需要,使用了两种方式实现了word文件转PDF的功能.以下的程序是我使用VB6编写,供大家参考. 第一种方法,使用PDFMAKERAPILib,使用这种方法,可以设置文件的安全性.这种方式是A ...
最新文章
- MS sql server和mysql中update多条数据的例子
- hibernate逆向工程生成的实体映射需要修改
- python字典items返回什么_Python 字典items返回列表,iteritems返回迭代器
- mysql时间戳计算_mysql根据时间戳计算
- wordpress增删改查
- python beautifulreport_Python unittest 之 BeautifulReport可视化报告
- Chrome保存mht网页文件的方法 – 无需任何插件,完美!
- 前端rem单位的使用研究
- HALCON 21.11:学习笔记---OPC_UA(I/O)
- CCF NOI1064 计算斐波那契第n项
- vue中实现分片大文件上传
- html5视频自动轮播,HTML5教程 可自动轮播的旋转木马插件
- 【Excel VBA】自动调整列宽和行高
- 如何利用路由器连接wifi并将wifi网络分发出去
- 春晚小宫女唐奕霖 网友封为最美的年轻董事长
- 阿龙的学习笔记---转载及精炼总结github仓库:cpp-backend-reference
- 起诉传音,华为为何会对一张壁纸要价2000万?
- DAX中的ALL函数
- Windows10连不上网报错代码
- 数字化转型的幕后英雄,希捷存储 40 年
热门文章
- 中科院自动化所研究员课题组PPT《如何撰写毕业论文?》
- TensorFlow入门:TensorFlow工作原理
- Tracking 的SimTrack 以及 4D seg
- 接收率高达29%的ICLR 2021有哪些论文入榜呢?
- (转)20个令人惊叹的深度学习应用
- Android把数组从大到小排列,Android SparseArray 排序
- mysql8.0导入备份_mysql8.0.20配合binlog2sql的配置和简单备份恢复的步骤详解
- php获取继承类方法吗,php如何获取当前类名,继承中的问题?
- mysql en dump_mysqldump 命令总结
- jQuery中each的用法之退出循环和结束本次循环