ThinkGeo.com    |     Documentation    |     Premium Support

Getting "The process cannot access the file 'xxx' because it is being used be another process

Hello,


As stated above, I seem to be running into an issue when I am unable to Add a layer to my map because the file is in use elsewhere. What I am doing before adding the layer is generating a RecordID using the built in function to do so from ShapefileFeatureLayer. As soon as I implemented a check system to see if the field exists and if not to create it, I started receiving this error.


I am unsure if the record ID is still being generated or what the case may be but I am wondering how to check the layer to see if it is in use by another process and handle it from there. It did not immediately seem to to be built into the methods and properties or the layer.


 



Nelson,


Thanks for your post!
 
I think we should close the layer before we build the record id for it. Following is the code I tested against and you need to reference the corresponding data for it.

        private void Form1_Load(object sender, EventArgs e)
        {
            winformsMap1.MapUnit = GeographyUnit.DecimalDegree;

            winformsMap1.CurrentExtent = new RectangleShape(-126.4, 48.8, -67.0, 19.0);
            winformsMap1.BackgroundOverlay.BackgroundBrush = new GeoSolidBrush(GeoColor.GeographicColors.ShallowOcean);


            ShapeFileFeatureLayer worldShapeLayer = new ShapeFileFeatureLayer(@"..\..\..\..\..\PostsData\Countries02.shp");
            worldShapeLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.County1;
            worldShapeLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

            ShapeFileFeatureLayer statesLayer = new ShapeFileFeatureLayer(@"..\..\..\..\..\PostsData\USStates.shp");
            statesLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.State1;
            statesLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.LineJoin = DrawingLineJoin.Round;
            statesLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;



            LayerOverlay staticOverlay = new LayerOverlay();
            staticOverlay.Layers.Add("WorldShapeLayer", worldShapeLayer);
            staticOverlay.Layers.Add("StatesLayer", statesLayer);

            winformsMap1.Overlays.Add("LayerOverlay", staticOverlay);

            statesLayer.Open();
            usBoudningBox = statesLayer.GetBoundingBox();
            statesLayer.Close();

            winformsMap1.Refresh();
        }

        private void btnBuildRecId_Click(object sender, EventArgs e)
        {
            if (majorCitiesShapeLayer != null) { majorCitiesShapeLayer.Close(); }

            ShapeFileFeatureLayer.BuildRecordIdColumn(@"..\..\..\..\..\PostsData\MajorCities.shp", "RecId", BuildRecordIdMode.Rebuild);
        }

        private ShapeFileFeatureLayer majorCitiesShapeLayer;
        private void btnAddLayer_Click(object sender, EventArgs e)
        {
            LayerOverlay layerOverlay = (LayerOverlay)winformsMap1.Overlays["LayerOverlay"];
            layerOverlay.Lock.EnterWriteLock();
            try
            {
                majorCitiesShapeLayer = new ShapeFileFeatureLayer(@"..\..\..\..\..\PostsData\MajorCities.shp");
                majorCitiesShapeLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = PointStyles.City1;
                majorCitiesShapeLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle = TextStyles.City1("AREANAME");
                majorCitiesShapeLayer.ZoomLevelSet.ZoomLevel01.DefaultTextStyle.BestPlacement = true;
                majorCitiesShapeLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

                layerOverlay.Layers.Add("majorCitiesShapeLayer", majorCitiesShapeLayer);
            }
            finally
            {
                layerOverlay.Lock.ExitWriteLock();
            }

            winformsMap1.Refresh();
        }

Any more questions just let me know.


Thanks.
 
Yale