找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 685|回复: 2

[求助]:[求助]:大家好 请过来看看下段代码有何问题(字符串替换),谢谢

[复制链接]
发表于 2005-6-6 10:03:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
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)”,但为何有的文件又能够替成功呢,请大家指教,谢谢!
同样不能替换的文件,操作几次,乃至单独替换都不行

,而其他文件又可以,真不知道什莫原因,拜托大家了!
不能替换的文件如下:举一例:
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-6-6 11:12:53 | 显示全部楼层
出现这个的原因是因为你在调用“((AcDbText*)pEntity)->setTextString(st)”时,pEntity 并没有以写方式打开,最好在"pBlockIterator->getEntity(pEntity, AcDb::kForWrite);"处加个叛断,并在程序工作的地方加上保护!!

另外文件中带有被锁定的层,可能也有关系!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-7 07:53:32 | 显示全部楼层
你说的没错,问题已经解决
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-14 13:47 , Processed in 0.283892 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表