ESRI Shapefile Reader in .NET

Updated on Thursday, November 3, 2022

ESRI Shapefile Reader in C#/.NET

I've just released a .NET library for parsing ESRI shapefiles - see ESRI Shapefile Reader on GitHub. The library and source code are available under the Microsoft Public License.

A Shapefile is actually at least three files: a main file containing shape data (*.shp), an index file for locating shape records in the main file (*.shx) and a database of metadata for each shape (*.dbf) in dBASE format.

I ended up writing the library in order to convert Eric Muller's time zone shapefile into a format I could use with Catfood Earth. I found other libraries that could read shape data but not metadata, or provided a very thin .NET wrapper on top of unmanaged code and so I decided that a fully managed library could be useful.

The library - Catfood.Shapefile.dll - provides read-only, forward-only access to shapes and shape metadata. Currently all 2D shapes are supported: Null, Point, MultiPoint, PolyLine and Polygon. I might add additional types in the future, or if you have a pressing need it would be easy to extend the library by looking at an existing shape subclass and the shapefile specification (PDF).

See the GitHub project for sample code and documentation.


Catfood.Shapefile 1.60

I just released Catfood.Shapefile 1.60. This contains a fix from Libor Weigl that factors out the enumerator so that you can still access the shapefile after enumeration.

Catfood.Shapefile is a .NET library for parsing ESRI Shapefiles.


Shapefile Update

A few people have asked for 3D shape support in my ESRI Shapefile library. I've never got around to it, but CodePlex user ekleiman has forked a version in his ESRI Shapefile to Image Convertor that supports PointZ, PolygonZ and PolyLineZ shapes. If that's what you need please check it out.

Catfood.Shapefile 1.50

I've just released a small update to my C# Shapefile library on Codeplex. Catfood.Shapefile 1.50 fixes a couple of bugs related to metadata and adds the ability to access metadata records directly via IDataRecord. 

Catfood.Shapefile 1.40

I’ve just released a small update to Catfood.Shapefile. Stephan Stapel, who implemented PolyLineM support, has contributed a patch that improves the class hierarchy. CodePlex user originSH suggested supporting the ACE driver for 64-bit systems. I’ve added a constructor overload that allows you to use predefined Jet and ACE connection strings or provide your own templates if necessary. Thanks to Stephan and originSH.

Catfood.Shapefile is a .NET library for enumerating ESRI shapefiles. I originally wrote the library to help me build some complex layers in Catfood Earth. Since then it’s picked up thousands of users and some really valuable suggestions and patches from the CodePlex community. I’m very glad a took a couple of hours to open source the library back in 2009.

PolyLineM support in Catfood.Shapefile

I’ve just updated Catfood.Shapefile, my ESRI Shapefile parser for .NET, with PolyLineM support thanks to a contribution from Stephan Stapel. The solution for the new version has also been updated to Visual Studio 2010.

Download Catfood.Shapefile.dll 1.30 from CodePlex.

ESRI Shapefile Library Update

I've just released a small update for my ESRI Shapefile Reader project on GitHub. The only change is a patch from SolutionMania that fixes a problem when the shapefile name is also a reserved name in the metadata database. The patch escapes the name preventing an exception from being thrown.

Catfood.Shapefile.dll is a .NET 2.0 forward only parser for reading an ESRI Shapefile. Download 1.20 from GitHub.

Catfood.Shapefile.dll 1.10

I've just released v1.10 of my ESRI Shapefile Reader (Catfood.Shapefile.dll). This is a .NET 2.0 forward only parser for reading shapefile content.

Sharon Tickell was kind enough to report two bugs with suggested updates. These have both been fixed in 1.10.

While working on these fixes I also discovered that there are no 64-bit Jet drivers (since releasing the first version I've upgraded to a 64-bit box for development). This is an easy fix, just target any application using Catfood.Shapefile.dll at x86. I've updated the demo application accordingly.

Download Catfood.Shapefile.dll from GitHub.

Add your comment...

Related Posts

You Might Also Like

(All Code Posts)


Rob Ellison

Thanks Cat, will check it out and see if it works with the Shapefile dBase format.

Patrick Cozzi

Rob, I'm interested to know if the 64-bit drivers work with the Shapefile dBase format. I am currently running as a 32-bit process to workaround the issue.

Also, do you know if I can read different shapefiles using different threads with your library?


Rob Ellison

Patrick, I haven't tried the 64-bit driver yet. This was the only reason for forcing the demo app to run as 32-bit so it should be easy to test by updating the project to "Any CPU" and trying it with a shapefile.

The library is not thread safe so you should enumerate on a single thread. This only applies to parsing the file, once you've got the shape objects you could use worker threads to perform whatever processing is needed. Does this help?

Richie Rich

Hi mate, just a short "THANK YOU" for all your work on the catfood shapefile suite, I've just got it up and running on a project I'm working on. Thanks :)

Ian Hannah


How can you determine if the points read are in lat/long or easting/northing format?

Obviously I could probably try and work it out but is there an easier way to find out?



Robert Ellison

Depends on the file. If you have a .prj that should have coordinate information. I usually understand this from the source of the shapefile, or plot it and see if it makes sense.

Jon Bastow


Just trying to get this handy little library working in a .NET project in VS2022. Seeing some problems with the following exception:

Unhandled exception. System.InvalidOperationException: The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine.

The only way I can get this working is targeting an x86 environment.

Are you aware of any options to get this running on 64-bit?



Robert Ellison

Hi Jon, I'm not aware of any solution to the missing 64-bit Jet drivers. When I use this library I target x86. If you find anything useful please post back.

Tanguy Drieu

About the 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine.' issue, you need to install the new driver Microsoft Access Database Engine 2010 Redistributable.

Then target the Shapefile.ConnectionStringTemplateAce (Microsoft.ACE.OLEDB.12.0) instead of the Jet one when using the Shapefile constructor.

That worked for me.

Add Comment

All comments are moderated. Your email address is used to display a Gravatar and optionally for notification of new comments and to sign up for the newsletter.

I Thought He Came With You is Robert Ellison's blog.



CodePlex Shutdown: Shapefile, Orb, StackHash and Blogger2BlogML Migration