程序中如何删除MO中当前正在使用的SHP文件(C#,MO2.4)

直接Layers.Remove(layer) 后,无法删除相应的图层文件,在浏览器中删除会提示当前文件被其它程序使用,无法删除

只有一种可能,那就是在Layers中移除之后还被其它东东引用,所以对象没有释放

研究了一下,放出来与大家share

 

            MO2.GeoDataset gdsShare = null;
            ESRI.MapObjects2.Core.MapLayer ml = new ESRI.MapObjects2.Core.MapLayer();
            MO2.DataConnection dc = new ESRI.MapObjects2.Core.DataConnection();
            dc.Database = @"D:/Data/USA";
            if (dc.Connect())
            {
                ml.GeoDataset = gdsShare = dc.FindGeoDataset("CAPITALS");
                axMap1.Layers.Add(ml);
            }
            ESRI.MapObjects2.Core.MapLayer ml2 = ml;

            MO2.TableDesc td = new ESRI.MapObjects2.Core.TableDesc();
            td.FieldCount = 1;
            td.set_FieldType(0, ESRI.MapObjects2.Core.FieldTypeConstants.moBoolean);
            gdsShare = dc.AddGeoDataset("DD", ESRI.MapObjects2.Core.ShapeTypeConstants.moShapeTypePoint, td, false, false);

            //运行这行后,d:/data/usa/capitals.dbf 不能删除
            axMap1.Layers.Clear();
            //运行这行后,d:/data/usa/capitals.dbf可以被删除,虽然这个是 ml2 对象的 geodataset
            //这里的gdsShare 只是为了替换原来的东东,因为直接设为 null 会有exception
            ml2.GeoDataset = gdsShare;
            //这一行其实没什么用
            ml = null;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值