文件读取
当我们希望对非当前文件执行读取操作时,就需要使用该方法实现跨文件的数据读取。关于文件读取的大致流程为首先确定需要操作文件的路径,然后通过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的文件。