ArcEngine filegeodatabase锁定文件 .Lock

5 篇文章 0 订阅

项目中遇到了ArcEngine锁的问题,读取Shp文件后,多产生了.Lock文件,导致下次运行无法得到预期值。


Arcgis官方文件锁说明

转载自:AE filegeodatabase锁定文件

网上找到这篇内容,虽然还没尝试成功,感觉比较靠谱,先记录下。

1、说明

在使用ArcGIS桌面产品的时候,有时会碰到这样的情况:同时在ArcCatalogArcMap中浏览图层数据,然后在ArcMapremove掉图层,再回到ArcCatalog中删除该图层,却得到该图层被锁的信息。非得关掉ArcMap才能正常删除。同样的情况也会在ArcEngine开发的应用程序中碰到。可有时候会有这样需要,在不关闭ArcEngine应用程序的情况下,对图层数据做相应的操作,如将图层数据压缩打包。对这个问题ArcEngine提供了相应的接口控制,只是我们很少去关注而已。

2、解锁资源文件

解除对资源文件的锁定需要使用IWorkspaceFactoryLockControl接口,默认情况下对资源文件的锁定状态是打开的,可通过如下的方式得知:

ipWsFactoryLock.SchemaLockingEnabled

解锁资源文件的一般步骤:使用IWorkspaceFactoryLockControl接口关闭资源锁定,然后在使用完AE COM接口后,使用ComRelease释放COM接口即可。示例源码如下:

private void mnuItemUnlockFGDB_Click(object sender, EventArgs e)
{
        IWorkspaceFactory2 ipWsFactory = new FileGDBWorkspaceFactoryClass();
        
        //关闭资源锁定
	IWorkspaceFactoryLockControl ipWsFactoryLock;	
	ipWsFactoryLock = (IWorkspaceFactoryLockControl)ipWsFactory;
				
	if (ipWsFactoryLock.SchemaLockingEnabled)
	{
		ipWsFactoryLock.DisableSchemaLocking();
	}

	String strConn = "DATABASE=F:\\临时测试\\world.gdb";		
	IWorkspace ipWorkspace = ipWsFactory.OpenFromString(strConn,0);
	IFeatureWorkspace ipFtWorkspace = (IFeatureWorkspace)ipWorkspace;
	IFeatureDataset ipFtDataset = ipFtWorkspace.OpenFeatureDataset("world");
	IEnumDataset ipEnumDataset = ipFtDataset.Subsets;
	ipEnumDataset.Reset();
	IDataset ipDataset = ipEnumDataset.Next();

	while (ipDataset!=null)
	{				
		IFeatureClass ipFtClass = (IFeatureClass)ipDataset;		
		IFeatureLayer ipFtLayer = new FeatureLayerClass();			
		ipFtLayer.FeatureClass = ipFtClass;				
		ipFtLayer.Name = ipDataset.Name;
        	//对图层做相关操作处理
		ipDataset = ipEnumDataset.Next();
		ComReleaser.ReleaseCOMObject(ipFtClass);	
		ComReleaser.ReleaseCOMObject(ipFtLayer);
	}

	ComReleaser.ReleaseCOMObject(ipWorkspace);
	ComReleaser.ReleaseCOMObject(ipFtWorkspace);
	ComReleaser.ReleaseCOMObject(ipFtDataset);
	ComReleaser.ReleaseCOMObject(ipEnumDataset);
	ComReleaser.ReleaseCOMObject(ipDataset);
	ComReleaser.ReleaseCOMObject(ipWsFactory);
	ComReleaser.ReleaseCOMObject(ipWsFactoryLock);
}



  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值