//检测图层完整性 ygc 2012-8-30 private void CheckLayer(IWorkspace TemplateWorkspace, IWorkspace TestWorkspace) { bool flag = true; List <string> pTempLayerList = ModDBOperator.GetFeatureClassListOfWorkspace(TemplateWorkspace); IEnumDataset pEnumDataset = TestWorkspace.get_Datasets(esriDatasetType.esriDTFeatureClass); Dictionary <string, esriGeometryType> pTypeDic = GetFeatureClassType(TemplateWorkspace); pEnumDataset.Reset(); IDataset pDataset = pEnumDataset.Next(); List <string> pMoreList = new List <string>(); IList <string> pErrorType = new List <string>(); string strResult = ""; while (pDataset != null) { if (pTempLayerList.Contains(pDataset.Name)) { IFeatureClass pTestFeatureClass = pDataset as IFeatureClass; if (pTypeDic[pDataset.Name] != pTestFeatureClass.ShapeType) { pErrorType.Add(pDataset.Name); flag = false; } pTempLayerList.Remove(pDataset.Name); } else { pMoreList.Add(pDataset.Name); } pDataset = pEnumDataset.Next(); } pEnumDataset = TestWorkspace.get_Datasets(esriDatasetType.esriDTFeatureDataset); pEnumDataset.Reset(); IFeatureDataset pFeaDataset = pEnumDataset.Next() as IFeatureDataset; while (pFeaDataset != null) { IFeatureClassContainer pFeatureClassContainer = pFeaDataset as IFeatureClassContainer; IEnumFeatureClass pEnumFeatureClass = pFeatureClassContainer.Classes; IFeatureClass pFeatureClass = pEnumFeatureClass.Next(); while (pFeatureClass != null) { IDataset pTmpdt = pFeatureClass as IDataset; if (pTempLayerList.Contains(pTmpdt.Name)) { if (pTypeDic[pTmpdt.Name] != pFeatureClass.ShapeType) { pErrorType.Add(pTmpdt.Name); flag = false; } pTempLayerList.Remove(pTmpdt.Name); } else { pMoreList.Add(pTmpdt.Name); } pFeatureClass = pEnumFeatureClass.Next(); } pFeaDataset = pEnumDataset.Next() as IFeatureDataset; } #region 写错误信息 if (pErrorType.Count > 0) { strResult += "以下图层数据类型不同:\r\n"; } for (int i = 0; i < pErrorType.Count; i++) { strResult = strResult + " " + pErrorType[i] + "\r\n"; } if (pTempLayerList.Count > 0) { strResult += "缺少以下图层:\r\n"; } for (int i = 0; i < pTempLayerList.Count; i++) { strResult = strResult + " " + pTempLayerList[i] + "\r\n"; } if (pMoreList.Count > 0) { strResult = strResult + "多余以下图层:\r\n "; } for (int i = 0; i < pMoreList.Count; i++) { strResult = strResult + " " + pMoreList[i] + "\r\n "; } if (strResult == "") { MessageBox.Show("检查通过", "提示"); return; } else { DialogResult result = MessageBox.Show("检查未通过,是否查看日志文件?", "提示", MessageBoxButtons.OKCancel); WriteLog(strResult); if (result == DialogResult.OK) { System.Diagnostics.Process.Start("notepad.exe", _LogFilePath); } } #endregion }