15

Is it possible to embed a custom binary file inside a C# class library and then at runtime read it with a binary reader?

I'm guessing it might be possible through resources.

Many thanks

Andy
  • 739
  • 1
  • 9
  • 18

2 Answers2

19

You can do this by adding the file to the Resources through the project properties. Visual studio will then give you a handy class to access your file using the following code

byte[] theFile = myNamespace.Properties.Resources.theBinaryFile;

Where the resource name is theBinaryFile.

John Hunter
  • 4,042
  • 4
  • 26
  • 35
  • 1
    RE: my comment on the answer below. If the original file changes will it be re-embedded automatically when I next build the project? – Andy Jun 02 '09 at 08:57
  • 2
    yes if you change the file the next build will update the resource file. – John Hunter Jun 03 '09 at 12:08
5

Yes it is easy:

Add the file to your project and set the "Build action" to "Embedded resource".

In your program do

foreach (string name in Assembly.GetExecutingAssembly().GetManifestResourceNames())
{
  if (name.EndsWith("<name>", StringComparison.InvariantCultureIgnoreCase))
  {
    using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(name))
    {
      // ...
    }
    break;
  }
}

Finding the right resource is a little bit complicating because there is stuff in front of the file name (namespaces etc. set a breakpoint to the if(...) to see the real resource name).

mmmmmmmm
  • 15,269
  • 2
  • 30
  • 55
  • This works great. Especially as I am constantly changing the file contents and it just re-embeds when I build the project. – Andy Jun 02 '09 at 08:56