Gold
Gold

Reputation: 62534

How to Hide gif or mp3 files in my project?

I have a C# project with some gif and mp3 files

how I can combine those files within my project?

(I don't want them to be visible to users)

Upvotes: 4

Views: 1363

Answers (4)

Andrew
Andrew

Reputation: 8673

You need to include them in the project as resources, and then access them later by reading from the DLL.

For gif files you can simply drop them on the resources (in the project->properties dialog) and then access them via

var img = Properties.Resources.GifName;

For mp3 files you will probably need to use embedded resources, and then read them out as a stream. To do this, drag the item to a folder in your project dedicated to these types of files. Right click on the file in the explorer and show the properties pane, and set the "build action" to "embedded resource".

You can then use code something like this (untested translation from vb, sorry), to get the thing back out as a stream. It's up to you to transform the stream into something your player can handle.

using System.Linq; // from System.Core.  otherwise just translate linq to for-each
using System.IO;

public Stream GetStream(string fileName) {
    // assume we want a resource from the same that called us
    var ass = Assembly.GetCallingAssembly();
    var fullName = GetResourceName(fileName, ass);
    //  ^^ should = MyCorp.FunnyApplication.Mp3Files.<filename>, or similar
    return ass.GetManifestResourceStream(fullName);
}

// looks up a fully qualified resource name from just the file name.  this is
// so you don't have to worry about any namespace issues/folder depth, etc.
public static string GetResourceName(string fileName, Assembly ass) {
    var names = ass.GetManifestResourceNames().Where(n => n.EndsWith(fileName)).ToArray();
    if (names.Count() > 1) throw new Exception("Multiple matches found.");
    return names[0];
}    

var mp3Stream = GetStream("startup-sound.mp3");

var mp3 = new MyMp3Class(mp3stream);  // some player-related class that uses the stream

Here are a few links to get you started

Upvotes: 11

Tommi Forsstr&#246;m
Tommi Forsstr&#246;m

Reputation: 1467

Add them as embedded resources and they'll be compiled into the dll.

First add them to the project, by just dragging them to the solution explorer, then go to their properties to change their build action to embedded resources.

Upvotes: 7

Jeff Wain
Jeff Wain

Reputation: 1022

You should just be assigning them as resources. If you bring up the Properties panel in VS, make sure your build action is set to Resource and Copy to Output Directory is set to Do not copy. You can also manage resources from within the project properties in the resources tab.

Upvotes: 1

Ot&#225;vio D&#233;cio
Ot&#225;vio D&#233;cio

Reputation: 74290

Include them in a resource file (resx).

Upvotes: 4

Related Questions