日期:2014-05-17  浏览次数:20939 次

Can't open file:…… 不知道什么原因!
用DWGDirect插件里的ReadDwgFile方法,报这个错,不知道什么原因,怎么解决,请大虾帮忙啊
C# code

protected void btn_save_Click(object sender, EventArgs e)
    {
        string path = "../imgfile/201207/201207171339369062.dwg";
       
        //AcadDatabase acaddb = new AcadDatabase();
        //DataTable dt = Hun.BLL.CadAdd; 
        //int blocks = acaddb.Blocks.Count;
       getCAD(path);
        
    }
    public void getCAD(string path)
    {
        Database db = new Database();
        try
        {
            //把DWG文件读入到一个临时的内存数据库中
            //using (db = new Database(false, true))
            //{

                db.ReadDwgFile(path, System.IO.FileShare.ReadWrite, true, null);
                //现在进入数据库并获得数据库的块表引用
                Transaction trans = db.TransactionManager.StartTransaction();
                BlockTable bt = (BlockTable)trans.GetObject(db.BlockTableId, OpenMode.ForRead, false, true);
                //从块表的模型空间特性中获得块表记录,块表记录对象包含DWG文件数据库实体
                BlockTableRecord btr = (BlockTableRecord)trans.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForRead, false, true);
                foreach (ObjectId btrId in btr)
                {
                    DBObject entBlock = (DBObject)trans.GetObject(btrId, OpenMode.ForRead, false, true);
                    if (entBlock.GetRXClass().DxfName.ToUpper() == "INSERT")
                    {
                        BlockReference bRef = (BlockReference)entBlock;
                        if (bRef.AttributeCollection.Count != 0)
                        {
                            System.Collections.IEnumerator bRefEnum = bRef.AttributeCollection.GetEnumerator();
                            while (bRefEnum.MoveNext())
                            {
                                ObjectId aId = (ObjectId)bRefEnum.Current;//这一句极其关键
                                AttributeReference aRef = (AttributeReference)trans.GetObject(aId, OpenMode.ForRead, false, true);
                                TextBox1.Text = aRef.TextString;               
                            }
                        }
                    }
                }
                trans.Commit(); //提交事务处理                                                                                     
                btr.Dispose();
                bt.Dispose();
            }
        //}
        catch (System.Exception ex)
        {
            Response.Write("\n出错啦: " + ex.Message);
        }
        finally
        {
            db.Dispose();
            services.Dispose();
        }   
    }


------解决方案--------------------
需要先初始化Teigha,再读图形文件,否则报错,如下:
using (Teigha.Runtime.Services srv = new Teigha.Runtime.Services())
{
//读取DWG文件
}

你用的哪个版本,发给我一下topia@163.com