private static IFeatureClass CreatStnShp(string shp)
{
//打开工作空间
IWorkspaceFactory wsfactory = new ShapefileWorkspaceFactoryClass();
string ssss = System.IO.Path.GetDirectoryName(shp);
IWorkspace workspace = wsfactory.OpenFromFile(ssss, 0);
IFeatureWorkspace pFeatWsp = workspace as IFeatureWorkspace; if (File.Exists(shp))
{
DialogResult dr = MessageBox.Show("文件已经存在,是否使用该文件?", "提示",
MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
if ( dr== DialogResult.Yes)
{
return pFeatWsp.OpenFeatureClass(System.IO.Path.GetFileNameWithoutExtension(shp));
}
else if(dr==DialogResult.No)
{
//删除已有
DialogResult ddr = MessageBox.Show("是否删除并替换已有文件", "提示",
MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (ddr == DialogResult.Yes)
{
string dbffile = System.IO.Path.ChangeExtension(shp, ".dbf");
string shxfile = System.IO.Path.ChangeExtension(shp, ".shx");
string prjfile = System.IO.Path.ChangeExtension(shp, ".prj");
File.Delete(shp);
if (File.Exists(dbffile))
File.Delete(dbffile);
if (File.Exists(shxfile))
File.Delete(shxfile);
if (File.Exists(prjfile))
File.Delete(prjfile);
}
else
{
MessageBox.Show("请重新选择shapfile文件的路径");
}
}
else
{
return null;
}
} IGeometryDefEdit pGeoDef = new GeometryDefClass();
pGeoDef.GeometryType_2 = esriGeometryType.esriGeometryPoint; //设置空间参考
ISpatialReferenceFactory3 spatialReferenceFactory = new SpatialReferenceEnvironmentClass();
ISpatialReference pSr = spatialReferenceFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_WGS1984); //设置字段
IFieldEdit pField;
IFieldsEdit pFieldsEdit = new FieldsClass();
//设置几何字段
pField = new FieldClass();
pField.Type_2 = esriFieldType.esriFieldTypeGeometry;
pField.GeometryDef_2 = pGeoDef;
pField.Name_2 = "Shape";
pFieldsEdit.AddField(pField);
//产生唯一索引字段
pField = new FieldClass();
pField.Name_2 = "OBJECTID";
pField.Type_2 = esriFieldType.esriFieldTypeOID;
pFieldsEdit.AddField(pField);
//添加station相关字段
//string[] str = new string[]{"NCDCID","WBAN","NAME","COOPID","COUNTRY","STNTYPE"};
string[] str = new string[] { "WBAN", "NAME", "LOCATION", "LAT", "LON"};
foreach (string stt in str)
{
pField = new FieldClass();
pField.Name_2 = stt;
pField.AliasName_2 = stt;
pField.Type_2 = esriFieldType.esriFieldTypeString;
if (stt == "LOCATION")
pField.Length_2 = 60;
else
pField.Length_2 = 30;
pFieldsEdit.AddField(pField);
}
pField = new FieldClass();
pField.Name_2 = "StnHeight";
pField.Type_2 = esriFieldType.esriFieldTypeDouble;
pFieldsEdit.AddField(pField); pField = new FieldClass();
pField.Name_2 = "GndHeight";
pField.Type_2 = esriFieldType.esriFieldTypeDouble;
pFieldsEdit.AddField(pField); IFeatureClass pfeatcls =pFeatWsp.CreateFeatureClass(System.IO.Path.GetFileNameWithoutExtension(shp), pFieldsEdit as IFields, null, null,
esriFeatureType.esriFTSimple, "Shape", "");
IGeoDataset pGeoDs = pfeatcls as IGeoDataset;
IGeoDatasetSchemaEdit pGeoDSe = pGeoDs as IGeoDatasetSchemaEdit;
if (pGeoDSe.CanAlterSpatialReference)
{
pGeoDSe.AlterSpatialReference(pSr);
} return pfeatcls;
}

上面是可正常运行的代码。自己写的时候凭着自己的理解做了部分修改,在字段声明的时候略有不同,如下

IFields pfs = new FieldsClass();
IFieldsEdit pFieldsEdit = pfs as IFieldsEdit;
IField pFieldd = new FieldClass();
IFieldEdit pField = pFieldd as IFieldEdit;

结果在运行的时候出现COM异常,仔细核查了CreateFeatureClass的每个参数,多次检查都没有查到结果。后来修改为文中第一段代码声明方式,再运行成功了。

为了找出错误,我又把声明换回第二段代码,令人郁闷的是,又没异常了。

本文只描述现象,不解释原因

CreateFeatureClass COM异常的更多相关文章

  1. CreateFeatureClass 异常,尝试读取或写入受保护的内存 Access

    在创建要素时出现如下异常,百思不得其解. 后经过多次试验,发现文件名改为其他的就可以了.自出的文件名为"第3条",后将文件名改为"A3"等,则可正常创建. 后再 ...

  2. ArcEngine开发异常:无当前记录

    使用 IFeatureWorkspace.CreateFeatureClass() 方法,出现异常:无当前记录 百度/谷歌没有找到合适的解决之道. 而是用IFeatureWorkspace.Creat ...

  3. alias导致virtualenv异常的分析和解法

    title: alias导致virtualenv异常的分析和解法 toc: true comments: true date: 2016-06-27 23:40:56 tags: [OS X, ZSH ...

  4. ASP.NET Core应用的错误处理[2]:DeveloperExceptionPageMiddleware中间件如何呈现“开发者异常页面”

    在<ASP.NET Core应用的错误处理[1]:三种呈现错误页面的方式>中,我们通过几个简单的实例演示了如何呈现一个错误页面,这些错误页面的呈现分别由三个对应的中间件来完成,接下来我们将 ...

  5. 记一次tomcat线程创建异常调优:unable to create new native thread

    测试在进行一次性能测试的时候发现并发300个请求时出现了下面的异常: HTTP Status 500 - Handler processing failed; nested exception is ...

  6. 使用JSONObject.fromObject的时候出现“There is a cycle in the hierarchy”异常 的解决办法

    在使用JSONObject.fromObject的时候,出现“There is a cycle in the hierarchy”异常.   意思是出现了死循环,也就是Model之间有循环包含关系: ...

  7. SignalR代理对象异常:Uncaught TypeError: Cannot read property 'client' of undefined 推出的结论

    异常汇总:http://www.cnblogs.com/dunitian/p/4523006.html#signalR 后台创建了一个DntHub的集线器 前台在调用的时候出现了问题(经检查是代理对象 ...

  8. [C#] C# 知识回顾 - 你真的懂异常(Exception)吗?

    你真的懂异常(Exception)吗? 目录 异常介绍 异常的特点 怎样使用异常 处理异常的 try-catch-finally 捕获异常的 Catch 块 释放资源的 Finally 块 一.异常介 ...

  9. [C#] C# 知识回顾 - 学会处理异常

    学会处理异常 你可以使用 try 块来对你觉得可能会出现异常的代码进行分区. 其中,与之关联的 catch 块可用于处理任何异常情况. 一个包含代码的 finally 块,无论 try 块中是否在运行 ...

随机推荐

  1. javascript 布尔类型值判断

    javascript中,值非null的对象在if()中都会被判断为true: if([]) {// true} if({}) {// true} if(null) {// false} if(&quo ...

  2. 转mysql存储引擎memory,ndb,innodb之选择

    1 mysql的innodb和cluster的NDB引擎都支持事务,在有共同的特性外,也有不同之处:以mysql cluster NDB 7.3和MySQL 5.6之InnoDB为例:ndb7.3基于 ...

  3. MFC 相关文件夹、文件操作

    //关于文件(夹)操作,可以参考下SHFileOperation这个外壳函数,貌似可以显示进度条.以下没有使用SHFileOperation//删除一个文件夹下的所有内容void myDeleteDi ...

  4. JDK 工具列表

    jar — 一个创建和管理 jar 文件的工具. java — Java 应用启动器.在这篇文章里,开发和部署都是用的这个启动器. javac — Java 编译器. javadoc — API 文档 ...

  5. 原始套接字(SOCK_RAW)

    本文转载:http://www.cnblogs.com/duzouzhe/archive/2009/06/19/1506699.html,在此感谢 原始套接字(SOCK_RAW). 应用原始套接字,我 ...

  6. linux下常见的文件夹含义

    1./bin :获得最小的系统可操作性所需要的命令2./boot :内核和加载内核所需的文件3./dev :终端.磁盘.调制解调器等的设备项4./etc :关键的启动文件和配置文件5./home :用 ...

  7. 烟大 Contest1024 - 《挑战编程》第一章:入门 Problem D: LC-Display(模拟计算器显示数字)

    Problem D: LC-Display Time Limit: 1 Sec  Memory Limit: 64 MBSubmit: 14  Solved: 3[Submit][Status][We ...

  8. c++find函数用法

    头文件 #include <algorithm> 函数实现 template<class InputIterator, class T> InputIterator find ...

  9. Codeforces Gym 100513G G. FacePalm Accounting

    G. FacePalm Accounting Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100513 ...

  10. 前端调试效率低?试试这10个“Chrome开发者工具”使用技巧

    摘要:今天给大家分享一些使用“Chrome开发者工具”的小技巧.包括调试,优化页面渲染速度等.希望能提升Web开发人员的工作效率. 今天给大家分享一些使用“Chrome开发者工具”的小技巧.包括调试, ...