龙空技术网

C井 判断文件是否被占用的两种方法

爱音乐的程序员小新人 92

前言:

现在咱们对“c语言bmp文件的读取”大约比较看重,同学们都需要了解一些“c语言bmp文件的读取”的相关文章。那么小编也在网摘上收集了一些关于“c语言bmp文件的读取””的相关知识,希望咱们能喜欢,大家一起来学习一下吧!

第一种方法:采用文件流方式;打开进行读取操作,看看是否可以;(亲自尝试,完全正确)

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;//true表示正在使用,false没有使用

}

第二种:

添加引用:kernel32.dll;32位动态链接库文件

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 vFileName = @"d:\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("没有被占用!");

}

个人更加倾向于第一种,少用引用,在部署的时候,就会少很多问题~~,上线时才能少些bug、小编比较粗心,由于项目中用的引用较多,所以部署的时候,总可能会丢引用,在生产环境下,就没有达到预想的效果,不过也养成一个习惯,所有添加的引用都放到一个固定的文件夹中,每次部署前,先把这些dll复制到打包文件夹,就会方便许多、尽可能的少依赖于固定的软件或者操作系统。

标签: #c语言bmp文件的读取