首页 > 代码库 > arx对正在操作的文件进行保存

arx对正在操作的文件进行保存

//对正在操作的文件进行保存STDMETHODIMP CTHDatabase::Save(void){ // TODO: 在此添加实现代码 Acad::ErrorStatus es ; try{  AcDbDatabase* pCurDb = acdbHostApplicationServices()->workingDatabase();  if(pCurDb == NULL)  {   return Error(L"Fialed to get current docment " ,IID_ITHDatabase,E_FAIL);  }  AcAxDocLock docLock( pCurDb, AcAxDocLock::kCurDocSwitch );  if(docLock.lockStatus() != Acad::eOk)   throw docLock.lockStatus();  //得到被操作dwg文件的数据库  AcDbDatabase* pWorkDb = NULL;  CAcApDocLockServer tempDocLockServer;  if(m_strFileName.IsEmpty())   pWorkDb = pCurDb;  else  {   pWorkDb = tempDocLockServer.GetDataBase(m_strFileName);   if(NULL == pWorkDb)   {    CString strErr = L"Fialed To open the " ;    return Error(strErr + m_strFileName,IID_ITHDatabase,E_FAIL);   }  }  //如果当前操作的文件不是ACAD当前活动文档,则进行存盘  if(!m_strFileName.IsEmpty()){            //遍历ACAD所打开的所有文档,如果当前操作的文件已经被ACAD打开,   //那么把此文档切换为活动文档,存盘后在切换到原来的活动文档   AcApDocument* pCurDoc = curDoc();   AcApDocumentIterator* iter = acDocManager->newAcApDocumentIterator();   if (iter) {    AcApDocument* tmpDoc;    for (; !iter->done(); iter->step()) {     tmpDoc = iter->document();     if (tmpDoc)     {      CString strFile(tmpDoc->fileName());      if(m_strFileName.CompareNoCase(strFile) == 0)      {       es = acDocManager->setCurDocument(tmpDoc, AcAp::kWrite);//切换为活动文档       if(Acad::eOk != es)       {        delete iter;        throw MESSAGE(es);       }       es = tmpDoc->database()->saveAs(m_strFileName);       if(Acad::eOk != es)       {        delete iter;        throw MESSAGE(es);       }       es = acDocManager->unlockDocument(tmpDoc);       if(Acad::eOk != es)       {        delete iter;        throw MESSAGE(es);       }       es = acDocManager->setCurDocument(pCurDoc);//切换到原来的活动文档       if(Acad::eOk != es)       {        delete iter;        throw MESSAGE(es);       }       delete iter;       iter = NULL;       return S_OK;      }     }    }    if(iter != NULL)    {     delete iter;     iter = NULL;    }   }            //如果当前操作的文件没有被ACAD打开,直接保存   es = pWorkDb->saveAs(m_strFileName);   if(Acad::eOk != es)    throw MESSAGE(es);  } } catch(const Acad::ErrorStatus) {   CString strErr = L"Fialed To open the " ;   return Error(strErr + m_strFileName,IID_ITHDatabase,E_FAIL); } return S_OK;}

 

arx对正在操作的文件进行保存