示例#1
0
        //检测图层完整性 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
        }