ArcEngine二次开发:Sample Code
AE二次开发中,打开本地shp文件后,出现文件锁定状态,即后缀为 .sr.lock。
string dkpath = System.IO.Path.GetDirectoryName(dkPath);
string dkname = System.IO.Path.GetFileName(dkPath);
IWorkspaceFactory pwf = new ShapefileWorkspaceFactory();
//关闭资源锁定
IWorkspaceFactoryLockControl ipWsFactoryLock = (IWorkspaceFactoryLockControl)pwf;//注意在java api中不能强转切记需要IWorkspaceFactoryLockControl ipWsFactoryLock = new IWorkspaceFactoryLockControlProxy(pwf);
if (ipWsFactoryLock.SchemaLockingEnabled)
{
ipWsFactoryLock.DisableSchemaLocking();
}
IWorkspace pw = pwf.OpenFromFile(dkpath, 0);
IFeatureWorkspace pfw = pw as IFeatureWorkspace;
IFeatureClass pfc = pfw.OpenFeatureClass(dkname);
IFeatureLayer pf = new FeatureLayerClass();
pf.FeatureClass = pfc;
pf.Name = "DKXX";
ILayer pl = pf as ILayer;
m_FeatureLayer = pl as IFeatureLayer;
this.mcView.AddLayer(pl, 0);
将解决文件锁定状态
使用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);
}
参考3
//ArcObjects Java code to unlock the Workspace
scExport = getServerContext(); // Open SDE Workspace
IWorkspaceFactory sdeWkspFactory = new IworkspaceFactoryProxy(scExport.createObject(“esriDataSourcesGDB.SdeWorkspaceFactory”));
// Open IworkspaceFactoryLockControlProxy object
IWorkspaceFactoryLockControlProxy ipWsFactoryLockProxy = new IWorkspaceFactoryLockControlProxy(sdeWkspFactory);
ipWsFactoryLockProxy.disableSchemaLocking();
public IServerContext getServerContext()
{
IServerContext sc = null;
String server = Constants.getAGSServer();
String user = Constants.getAGSUser();
String pwd = Constants.getAGSPwd();
String domain = Constants.getAGSDomain();
try
{
ServerInitializer serverInitializer = new ServerInitializer();
serverInitializer.initializeServer(domain, user, pwd);
ServerConnection connection = new ServerConnection();
connection.connect(server);
IServerObjectManager som = connection.getServerObjectManager();
sc = som.createServerContext(“”, “”);
}catch(Exception ex)
{
ex.printStackTrace();
}
return sc;
?fealayer 释放 ,修改还原了?
获取空间参考
ISpatialReference sourceSpatialReference = (featureClass as IGeoDataset).SpatialReference;
string wkid = sourceSpatialReference.FactoryCode.ToString();

浙公网安备 33010602011771号