在IM软件中发起文件发送时,如果要发送的是某word文件,并且该word文件被office打开,则会提示文件正在被占用无法发送,如下所示:
那文件被占用到底是如何判断出来的呢?其实很简单,调用系统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