Loading

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 释放 ,修改还原了?

问答2

  1. 数据编辑
    ArcEngine 数据查询、数据操作总结

ArcEngine 数据查询、数据操作总结

获取空间参考

ISpatialReference sourceSpatialReference = (featureClass as IGeoDataset).SpatialReference;
string wkid = sourceSpatialReference.FactoryCode.ToString();
posted @ 2025-03-12 22:32  一起滚月球  阅读(13)  评论(0)    收藏  举报