做个从dxf到GDB转换导入的一个小程序,和大家分享一下!
_sFilePath是.DXF文件所在的目录,是在先前获取到的一个文件路径.
IWorkspace pOutWorkspace = null;
IFeatureWorkspace pInWorkspace = null;
try
{
lstBox.Items.Add("开始导入...");
// 获取目的数据库的SDE的连接
AccessWorkspaceFactory pAccessWorkspaceFactory = new AccessWorkspaceFactory();
String sfileName = @"e:\TestDB.mdb";
pOutWorkspace = pAccessWorkspaceFactory.OpenFromFile(sfileName, 0);
IDataset pDataset = (IDataset)pOutWorkspace;
IWorkspaceName pWorkspaceName = (IWorkspaceName)pDataset.FullName;
// 获取CAD的数据库连接
IWorkspaceFactory pCADWorkspaceFactory = new CadWorkspaceFactory();
pInWorkspace = (IFeatureWorkspace)pCADWorkspaceFactory.OpenFromFile(_sFilePath, 0);
IFeatureDataset pFeatureDataset = pInWorkspace.OpenFeatureDataset(_sFileName);
//loop through the cad feature classes and convert
IFeatureClassContainer pFeatureClassContainer = (IFeatureClassContainer)pFeatureDataset;
IEnumFeatureClass pEnumFc = pFeatureClassContainer.Classes;
//枚举变量 遍历找到每个dxf文件中所包含的数据
IFeatureClass pFeatureClass =pEnumFc.Next();
while (pFeatureClass != null)
{
//Get the Input featureclassname
IDataset pInDataset = (IDataset)pFeatureClass;
IFeatureClassName pInFcName = (IFeatureClassName)pInDataset.FullName;
//Create new output featureclassname
IFeatureClassName pOutFeatureClassName = new FeatureClassNameClass();
IDatasetName pDatasetName = (IDatasetName)pOutFeatureClassName;
String sname = pFeatureClass.FeatureDataset.Name;
pDatasetName.Name = sname.Replace(".DXF", "_") + pFeatureClass.AliasName;
lstBox.Items.Add("导入" + sname.Replace(".dxf", "_") + pFeatureClass.AliasName);
//pDatasetName.Name = sname.Replace(".dwg", "_") + pFeatureClass.AliasName;
pDatasetName.WorkspaceName = pWorkspaceName;
//获取所有字段,并给一个新的字段赋予初始值
//检查要素类的字段是否有效
IFieldChecker pFieldChecker;
IFields pFields = pFeatureClass.Fields;
IFields pOutFields;
pFieldChecker = new FieldCheckerClass();
pFieldChecker.InputWorkspace = (IWorkspace)pInWorkspace;
pFieldChecker.ValidateWorkspace = pOutWorkspace;
IEnumFieldError pEnumFieldError = null;
pOutFields字段为检查后 赋予的新的字段信息
pFieldChecker.Validate(pFields, out pEnumFieldError, out pOutFields);
//对数据进行转换
IFeatureDataConverter pFDC = new FeatureDataConverter();
pFDC.ConvertFeatureClass(pInFcName, null, null, pOutFeatureClassName, null, pOutFields, "", 100, 0);
pFDC = null;
pFeatureClass = pEnumFc.Next();
}
pOutWorkspace = null;
pInWorkspace = null;
lstBox.Items.Add("导入完成");
}
catch (Exception ex)
{
pOutWorkspace = null;
pInWorkspace = null;
lstBox.Items.Add("导入失败");
MessageBox.Show(ex.Message);
}