- UID
 - 255808
 
- 积分
 - 0
 
- 精华
 
- 贡献
 -  
 
- 威望
 -  
 
- 活跃度
 -  
 
- D豆
 -  
 
- 在线时间
 -  小时
 
- 注册时间
 - 2005-5-9
 
- 最后登录
 - 1970-1-1
 
 
 
 
 
 
 | 
 
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册 
 
 
 
 
×
 
AcDbDatabase* pDb = new AcDbDatabase(false, true);  
    pDb->readDwgFile(File); 
 AcDbBlockTable *pBlockTable; 
    pDb->getSymbolTable(pBlockTable, AcDb::kForRead); 
    AcDbBlockTableRecord *pBlockTableRecord; 
    pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite); 
    pBlockTable->close(); 
    AcDbBlockTableRecordIterator *pBlockIterator; 
    pBlockTableRecord->newIterator(pBlockIterator); 
    for (; !pBlockIterator->done(); pBlockIterator->step()) 
    { 
        AcDbEntity *pEntity; 
        pBlockIterator->getEntity(pEntity, AcDb::kForWrite); 
        const char *pCname = pEntity->isA()->name(); 
  if(!strcmp(pCname, "AcDbText"))  
  { 
    const char *pText = ((AcDbText*)pEntity)->textString(); 
     CString st(pText); 
     st.Replace(m_SearchStr,m_ReplaceStr); 
if (((AcDbText*)pEntity)->setTextString(st) != Acad::eOk)  
    { 
        acutPrintf("\nSorry, that draing is probably already open."); 
        return; 
    } 
  } 
  else if(!strcmp(pCname, "AcDbMText"))  
  { 
   const char *pMText = ((AcDbMText*)pEntity)->contents(); 
   CString st(pMText); 
   st.Replace(m_SearchStr,m_ReplaceStr); 
   ((AcDbMText*)pEntity)->setContents(st); 
   if(pMText)  
    pMText = NULL;    
  } 
        pEntity->close(); 
    } 
    delete pBlockIterator; 
    pBlockTableRecord->close(); 
 pDb->saveAs(File); 
delete pDb; 
 
其他代码省略,我在运行后,一般DWG文件能够正常替换,但有个别文件不能够替换,AUTOCAD报出致命错误:“内部错误 dbobji.cpp@5717:eNotOpenForWrite",调试过程中发现问题出在“((AcDbText*)pEntity)->setTextString(st)”,但为何有的文件又能够替成功呢,请大家指教,谢谢! 
同样不能替换的文件,操作几次,乃至单独替换都不行 
 
,而其他文件又可以,真不知道什莫原因,拜托大家了! 
不能替换的文件如下:举一例: |   
 
 
 
 |