[C#.Net]判断文件是否被占用的两种方法

第一种方法:API

using System.IO;

using System.Runtime.InteropServices;

[DllImport("kernel32.dll")]

public static extern IntPtr _lopen(string lpPathName,int iReadWrite);

[DllImport("kernel32.dll")]

public static extern bool CloseHandle(IntPtr hObject);

public const int OF_READWRITE=2;

public const int OF_SHARE_DENY_NONE=0x40;

public readonly IntPtr HFILE_ERROR=new IntPtr(-1);

private void button1_Click(object sender,EventArgs e)

{

string [email protected]"c:\temp\temp.bmp";

if(!File.Exists(vFileName))

{

MessageBox.Show("文件都不存在!");

return;

}

IntPtr vHandle=_lopen(vFileName,OF_READWRITE|OF_SHARE_DENY_NONE);

if(vHandle==HFILE_ERROR)

{

MessageBox.Show("文件被占用!");

return;

}

CloseHandle(vHandle);

MessageBox.Show("没有被占用!");

第二种方法:FileStream

public static bool IsFileInUse(string fileName)

bool inUse=true;

FileStream fs=null;

try

{

fs=new FileStream(fileName,FileMode.Open,FileAccess.Read,FileShare.None);

inUse=false;

}

catch

{

}

finally

{

if(fs !=null)

fs.Close();

}

return inUse;

}

项目代码的部分(VB.Net)

Sub Prepare()

If File.Exits(logRW) Then File.Delete(logRW)

Dim bflag As Boolean=False

Try

Do

Shell("CMD.exe/C RW.exe /Command=LimitA.rw  /LogFile-LimitA.log",AppWinStyle.Hide,True,5000)

Threading.Thread.Sleep(1000)

While(IsFileInUse("LimitA.log"))

Threading.Thread.Sleep(2000)

End While

If File.Exists(logRW) Then

Dim All As String=My.Computer.FileSystem.ReadAllText(logRW)

If All.Contains("Read EC Byte ox01=0x80") Then

bflag=True

End If

End If

Loop Until bflag

Using sr As New StreamReader(logRW)

Do Until sr.EndOfStream

Dim s As String=sr.ReadLine

If s.Contains("Set Environment RwLOCAL3") Then

‘Set Environment RwLOCAL3=4608 (DEC)

LimitA=CDbl(s.Split(New String(){"=","("},StringSplitOptions.RemoveEmptyEntries(1))

Console.WriteLine("Limit Current:" &LimitA)

LogStr=LogStr&vbCrLf&"Limit Current:"&LimitA

Exit Do

End If

Loop

End Using

Catch ex As Exception

Console.WriteLien(ex.Message &Err.Description)

Environment.Exit(1)

End Try

End Sub

Function IsFileInUse(ByVal fileName As String)

Dim inUse As Boolean=True

Dim fs As FileStream=Nothing

Try

fs=New FileStream(fileName,FileMoe.Open,FileAccess.Read,FileShare.None)

inUse=False

Catch ex As Exception

Finally

If(fs IsNot Nothing)Then

fs.Close()

End If

End Try

Return inUse

End Function

时间: 2024-10-24 22:09:07

[C#.Net]判断文件是否被占用的两种方法的相关文章

判断是否从微信进入的两种方法:

JS方法: $(function(){ is_weixn(); }) function is_weixn(){ var ua = navigator.userAgent.toLowerCase(); if(ua.match(/MicroMessenger/i)=="micromessenger") { return true; } else { alert('请在微信中打开!'); window.location.href="<?php echo site_url('w

判断文件是否存在的另一种方法 _access 和 _waccess

函数原型: int _access( const char *path, int mode ); int _waccess( const wchar_t *path, int mode ); 示例代码: [cpp] view plain copy #include <io.h> #include <stdio.h> #include <stdlib.h> int _tmain(int argc, _TCHAR* argv[]) { //如果文件具有指定的访问权限,则函数

C#:将图片文件上传到数据库两种方法。

方法1: 将图片复制到指定文件夹,在数据库中存储图片路径,通过读取路径来显示图片. string str; private void toolStripButton1_Click(object sender, EventArgs e) { if (openFileDialog1.ShowDialog() == DialogResult.OK) { str = openFileDialog1.FileName; pictureBox1.Image = Image.FromFile(str); }

流文件保存到本地的两种方法

1.FileStream fs = new FileStream(path, FileMode.Create);   fs.Write(ImageBuff, 0, ImageBuff.Length);   fs.Close(); 注释:ImageBuff 图片流,byte[]类型.path保存文件的路径 2. MemoryStream ms = new MemoryStream(ImageBuff);    Image img = Image.FromStream(ms);    img.Sav

让Mac复制文件到U盘的两种方法

一.让Mac支持ntfs格式磁盘 下载安装tuxera ntfs这款Mac读写软件,然后在系统偏好设置中找到刚刚安装好的软件图标并点击打开,在"卷"这一选项中我们就可以看到被Tuxera NTFS挂载的U盘了. 图1:tuxera ntfs挂载ntfs格式磁盘 二.硬盘格式化转换 这个实用功能也是在"卷"选项中,然后我们可以在右下角的地方看见"Disk Manager"这个按钮并点击这个按钮. 图2:tuxera ntfs的Disk Manage

Java学习-013-文本文件读取实例源代码(两种数据返回格式)

此文源码主要为应用 Java 读取文本文件内容实例的源代码.若有不足之处,敬请大神指正,不胜感激! 1.读取的文本文件内容以一维数组[LinkedList<String>]的形式返回,源代码如下所示: 1 /** 2 * @function 文本文件操作:读取数据 3 * 4 * @author Aaron.ffp 5 * @version V1.0.0: autoUISelenium main.java.aaron.java.tools FileUtils.java txtRead, 201

合并BIN文件的两种方法(转)

源:http://blog.chinaunix.net/uid-20745340-id-1878803.html 合并BIN文件的两种方法 在单片机的开发过程中,经常需要将两个单独的BIN文件合并成一个文件,方便烧写和生产.下面结合STM32的IAP Bootloader Code和Application Code的合并,介绍两种合并BIN文件的方法. 首先简单介绍一下STM32的IAP.IAP(In-application-programming),即在应用中编程.有了它,产品发布之后,仍然可

pdf文件怎么修改 修改PDF文件的两种方法

都说PDF格式的文件不能修改,我就呵呵了!不管你们信不信,反正我是不信.因为我会修改PDF文件,并且方法还不止一种.想知道我是怎么修改PDF文件的吗?下面我就告诉大家修改PDF文件的两种方法. 方法一 1.方法一就是将PDF文件转换成一种可容易编辑的文档,如:word.excel.ppt等格式,然后再进行编辑,编辑好后再将其转换成PDF格式,是不是很简单!具体是该如何转换的,下面有详细教程. 2.下载一个PDF转换器,并将它安装在电脑上.工具最好是支持双向转换的那种,如:http://www.x

自动创建文件夹的两种方法

自动创建文件夹的两种方法 1.CreateDictionary() CreateDirectory(myPath, 0); //在临时文件夹中创建本应用的文件夹 原型为:BOOL WINAPI CreateDirectory(__in  LPCTSTR lpPathName, __in LPSECURITY_ATTRIBUTES lpSecurityAttributes); 其中lpPathName是要创建的目录的路径,第2个涉及安全性问题 传NULL就好了 例如: char path[MAX_