Bentley二次开发教程20-文件及模型管理-文件操作

文件读取

当我们希望对非当前文件执行读取操作时,就需要使用该方法实现跨文件的数据读取。关于文件读取的大致流程为首先确定需要操作文件的路径,然后通过DgnDocument获得对应的DgnFile,通过DgnFile即可读取文件中信息。

public static void ReadDgnFile(string unparsed)
 {
     string strDgn = "E:\\工作相关\\20211213MS案例直播\\直播资料\\Part4\\ReadFile.dgn";//文件储存路径
     DgnDocument dgnDoc = DgnDocument.CreateForLocalFile(strDgn);//声明DgnDocument对象
     DgnFileOwner dgnFileOwner = DgnFile.Create(dgnDoc, DgnFileOpenMode.ReadOnly);//声明一个用于加载部分文件的DgnFile,控制DgnFile的生存期
     DgnFile dgnFile = dgnFileOwner.DgnFile;//获得已加载的DgnFile             
     dgnFile.LoadDgnFile(out StatusInt errorStatus);//读取加载DgnFile
     dgnFile.FillDictionaryModel();//确定已填充模型字典(非模型区,保存各种内置对象,如图层、样式等)

     DgnModel dgnModel = dgnFile.LoadRootModelById(out errorStatus, dgnFile.DefaultModelId);//根据模型ID读取文件中的指定模型
     ModelElementsCollection elems=dgnModel.GetGraphicElements();//获得模型中的所有图形元素
     string result = "The result is:\n";//声明字符串
     foreach(Element elem in elems)//遍历图形元素
     {
         result = result + "ElementId = " + elem.ElementId + " Element Type = " + elem.ElementType+'\n';//输出模型中的元素ID及元素类型
     }            
     MessageBox.Show(result);//输出结果
 }

在本案例中,通过指定文件路径获取到对应文件中的信息,而后找到文件的默认模型,获取模型中的图形元素信息并进行输出,通过查看对应文件中的模型可以看出,输出结果与文件中实际存在的模型信息一一对应。
命令输出结果
读取文件默认模型

文件另存为

当我们需要使用代码的方式实现文件的另存为时,就需要使用到DoSaveAs( )这个方法。实现另存为的功能流程为:首先在指定位置创建文件,创建完成后将需要另存的文件保存至刚才创建文件中。

public static void SaveAsDgnFile(string unparsed)//Case:test
{
    string filePath = "E:\\工作相关\\20211213MS案例直播\\直播资料\\Part4\\NewFileBySaveAs.dgn";//文件储存路径
    DgnDocument dgnDoc = DgnDocument.CreateForNewFile(out DgnFileStatus status, filePath, "", 0, "",DgnDocument.OverwriteMode.Always,DgnDocument.CreateOptions.Default);
    		/*
             * 用DgnDocument对象表示在文件中声明的新文件             
             * status:若返回空,则有可能为:文件已存在,但未指定覆盖或无法覆盖
             * documentName:声明文件的文件名称
             * searchPath:用于设置搜索的基本路径,可为空,他包含一个或多个配置变量,目录路径或文件路径
             * defFileId:表示声明的文件类型
             * wDefaultFileName:指定根据名称查找现有文件时使用的默认驱动器,路径,文件名或扩展名
             * overwriteMode:指定当文件存在时要执行的操作
             * options:声明类型
             */            
    if (dgnDoc!=null)//判断文件是否声明成功
    {
        StatusInt statusInt = dgnDoc.OnNewFileCreated();//声明文件后调用,允许文档管理器将文件添加到储存库中,若该文件只是临时文件则无需调用
        if (statusInt == StatusInt.Success)//判断是否成功
        {
            DgnFile dgnFile = Session.Instance.GetActiveDgnFile();//获得当前激活的文件信息
            statusInt = dgnFile.DoSaveAs(dgnDoc, DgnFileFormatType.V8, true, false);//将本文件另存到新建文件中
        }
    }          
}

在本案例中,首先在指定路径下创建了一个名为NewFileBySaveAs的dgn文件,然后将当前的文件信息另存至刚才创建的文件中。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

文件创建

当我们需要创建一个新的文件时,需要使用CreateNew( )实现。实现该功能的大致流程为首先确定文件储存地址,然后使用种子文件,文件打开模式等信息创建文件。

public static void CreateDgnFile(string unparsed)
{
    string filePath = "E:\\工作相关\\20211213MS案例直播\\直播资料\\Part4\\NewCreateFile.dgn";//文件储存路径
    DgnDocument dgnDoc = DgnDocument.CreateForNewFile(out DgnFileStatus status, filePath, "", 0, "", DgnDocument.OverwriteMode.Always, DgnDocument.CreateOptions.Default);//用DgnDocument对象表示在文件中声明的新文件                      
    if (dgnDoc != null)//判断文件是否声明成功
    {
        StatusInt statusInt = dgnDoc.OnNewFileCreated();//声明文件后调用,允许文档管理器将文件添加到储存库中,若该文件只是临时文件则无需调用
        if (statusInt == StatusInt.Success)//判断是否成功
        {
            DgnFile dgnFile = Session.Instance.GetActiveDgnFile();//获得当前激活的文件信息
            SeedData seed = new SeedData(dgnFile, dgnFile.DefaultModelId, SeedCopyFlags.AllData, false);//获得当前文中默认模型的种子信息
            DgnFileOwner owner = DgnFile.CreateNew(out DgnFileStatus fileStatus, dgnDoc, DgnFileOpenMode.ReadWrite, seed, DgnFileFormatType.V8, true);//基于种子文件(可选),声明一个dgn文件
            owner.Dispose();//在内存中释放该文件
        }
    }      
}

在本案例中,命令执行之后在指定的路径下生成了一个名为NewCreateFile的文件。
在这里插入图片描述
在这里插入图片描述

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值