背景:服务器上的Excel文件多人共享,多人编辑,但是同一时间只能有一个人编辑,当第一个人释放的时候第二个人才可以编辑,否则第二个人打开此EXCEL时提示该文件被第一个人lock了意图:完成一个监听程序,本机线程监服务器上该EXCEL,当第一人个释放关闭EXCEL时,本机线程自动启动打开Excel已经完成的效果:
while(1)
{
CFile f;
CFileException e;
if (f.Open(strTimeSheetPath, CFile::modeRead, &e))
{
f.Close();
ShellExecute(NULL,"open",strTimeSheetPath,NULL,NULL,SW_SHOWNORMAL);
}
}难点:在f.Close()和ShellExecute之间有一段时间空隙,此时会被别人迅速占用导到该程序变得没有意义设想,在f.open和f.close之间可否进行Excel的打开操作?在f.Open运行成功之后其实该Excel已经被我占用了,这时f.close释放了excel会被其他人占用。头痛,暂时想不出解决办法了。请高手帮忙
while(1)
{
CFile f;
CFileException e;
if (f.Open(strTimeSheetPath, CFile::modeRead, &e))
{
f.Close();
ShellExecute(NULL,"open",strTimeSheetPath,NULL,NULL,SW_SHOWNORMAL);
}
}难点:在f.Close()和ShellExecute之间有一段时间空隙,此时会被别人迅速占用导到该程序变得没有意义设想,在f.open和f.close之间可否进行Excel的打开操作?在f.Open运行成功之后其实该Excel已经被我占用了,这时f.close释放了excel会被其他人占用。头痛,暂时想不出解决办法了。请高手帮忙
CFileException e;
while(1)
{
if (f.Open(strTimeSheetPath, CFile::modeRead, &e))
{
break;
}
} 打开了就不要关嘛
{
if (_access(strTimeSheetPath.GetBuffer(0),6))
{
ShellExecute(NULL,"open",strTimeSheetPath,NULL,NULL,SW_SHOWNORMAL);
break;
}
}
如果在这么短的时间内都有可能被别人抢占的话,那么你除非你在判断的时候同时抢占这个资源,否则即使你判断成功了,那么执行的时候被别人抢占了。或者你考虑用excel提供的com接口,看看能否在那里进行判断同时占用。