ThinkGeo.com    |     Documentation    |     Premium Support

Delete file after removing a layer

I have big raster image file which i have loaded onto the map. At backend when map is not in view, i am trying to remove the raster image from layers and then remove it from disk. I get the file access error after while removing from the file from disk. I remove the file from layer first then i remove it from disk. Seems to be mapsuite code still holds the file for sometime. it takes couple of seconds to get the file access control. after couple of seconds i am able to delete a file from disk. i am using the sleep() which is not right. please suggest the right way of doing it.



Hi Rajanikanth,


Can you provide some clarification on what you mean by the 'map is not in view'?


Does this mean that the map itself is still active in your application, but that the current view of the map (the current extent) of the map does not have raster data?

In this case I am not sure I would recommend writing specific code to remove it from the Layer collection and then from the disk. What if your user pans to a location that has this raster data? Would you then get the raster file from some location, copy it to disk, and re-add it to the Layers collection?

Map Suite provides a number of ways to turn Layers on and off, both by ZoomLevel and by user interactive controls so that you do not need to manage the addition or removal of raster layers from the Layers collection or from disk. The raster layer could remain on disk and would only be loaded into memory when needed by the application.


I think a better understanding of your use case would help me provide you more focused assistance.



I have a map which consist of several raster layers. Each raster layer is an image. there is a seperate screen where user can import images from external drive. On import, these images are stored into local disk. User can also delete layers which are currenlty active on map. at the same time i need to remove them from local disk. 
 Problem: When i remove raster image from layers collection, then remove the file from local disk immediately raise the file IO access exception. My observation is that if a file is big, after removing it from layers, it takes some time to release the file access. I expect that after layers.remove() statement, i should be able to delete file immediately without any issue. 
 
((LayerOverlay)Map1.Overlays[component]).Layers.Remove(name);
//here depends on the file size, need to wait before executing next line
System.IO.File.Remove(Path.combine(dir,name));
 
 
  
 hope this clarifies …

Hi Rajanikanth,  
  
 Thanks for the clarification! 
 The Layers.Remove does not release the resources that the Layer is attached too. It only removes it from the Layers collection. 
 I believe you will have success if you call a Layer.Close() before you remove the file from the file system. 
  
 I tested this with a 675 MB TIFF file (loaded as a GeoTiffRasterLayer) and did not encounter any System.IO exceptions.

Thanks. it works with Layer.close().

Hello Rajanikanth, 
  
 You are welcome, please feel free to let us know your problem. 
  
 Regards, 
  
 Gary