在IM软件中发起文件发送时,如果要发送的是某word文件,并且该word文件被office打开,则会提示文件正在被占用无法发送,如下所示:

C++ 判断目标文件是否被占用(独占)(附源码)-LMLPHP

 那文件被占用到底是如何判断出来的呢?其实很简单,调用系统API函数CreateFile,打开该文件(OPEN_EXISTING),传入FILE_SHARE_READ共享读标记位,如果文件被占用,则文件会打开失败。

1、判断文件被占用的代码

        判断文件被占用的接口函数 IsFileOccupiedByOtherProgram,实现如下:

BOOL IsFileOccupiedByOtherProgram( const CString& strFilePath )
{
	// 检测的办法是通过研究某软件的文件传输表现现象来确定的
	HANDLE hFile = CreateFile( strFilePath, 
		GENERIC_READ,
		FILE_SHARE_READ, // 读共享,但写不共享,如果有程序正在占用着文件写,则该函数会返回失败
		NULL, 
		OPEN_EXISTING, 
		FILE_ATTRIBUTE_NORMAL, 
		NULL );
	if 
06-12 11:17