背景:服务器上的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会被其他人占用。头痛,暂时想不出解决办法了。请高手帮忙

解决方案 »

  1.   

      CFile f; 
      CFileException e; 
    while(1) 

      if (f.Open(strTimeSheetPath, CFile::modeRead, &e)) 
      { 
          break;      
      } 
    } 打开了就不要关嘛
      

  2.   

    while(1)  
    {  
      if (_access(strTimeSheetPath.GetBuffer(0),6))  
      { 
          ShellExecute(NULL,"open",strTimeSheetPath,NULL,NULL,SW_SHOWNORMAL); 
          break;       
      }  
    }  
      

  3.   

    这个不太好办啊,
    如果在这么短的时间内都有可能被别人抢占的话,那么你除非你在判断的时候同时抢占这个资源,否则即使你判断成功了,那么执行的时候被别人抢占了。或者你考虑用excel提供的com接口,看看能否在那里进行判断同时占用。
      

  4.   

    做一个服务端的软件不可以的就是判断了不能释放直接用判断时打开的句柄把Excel文件用Excel程序打开
      

  5.   

    用_access()检测读写权限,要比CFile打开再关闭来得快
      

  6.   

    我需要那种没有时间间隔的方法,因为抢的人实在太多了,最多有三四十个人同时想打开同一个Excel文件,所以我想抓住了就不要再释放了
      

  7.   

    Office自己带有解决机制,不需要另外处理。
      

  8.   

    Office自己带有解决机制是什么?是不是那个通知功能?不好用我想自己用程序控制,不知道有没有解决方法
      

  9.   

    可以设一个标志位flag,初始化时,flag=0,要进行操作时,先判定flag是否为0,若是,则将flag置为非0,然后进行修改。反之.