日期:2014-05-17  浏览次数:21079 次

关于C#资源文件操作的总结

// 在这里,我来总结一下关于资源文件的相关操作。

?

//1. 比较常见的有获取资源文件对应的文件流,然后转换到相对应的文件

// 比较典型的做法是通过代码程序集加载指定资源

// 如下通过Assembly 的静态方法GetExecutingAssembly() 得到程序集

// 还有很多方式可以得到代码程序集

System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly();

Stream manifestResourceStream = null;

manifestResourceStream = asm.GetManifestResourceStream("MyLibrary." + filename);

return manifestResourceStream;

//得到该文件流,这里也可以是字符流。

//如果我们资源文件对应的该清单是一个图片文件

System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(manifestResourceStream, true);

//如果我们的资源文件是光标文件

Cursor cursor = new Cursor(manifestResourceStream);

//图标

Icon icon = new Icon(manifestResourceStream);

//字符串

System.IO.StreamReader sr = new System.IO.StreamReader(manifestResourceStream);

string str = sr.ReadLine();

?

//2. 另外一种写法,主要是通过ResourceManager 类的GetObject() 方法

// 也可以通过GetStream() 得到流后执行操作.

System.Resources.ResourceManager manager =

new System.Resources.ResourceManager("资源名称", Assembly.GetExecutingAssembly());

Object target = manager.GetObject("资源文件名");//获取到指定的资源的值

//在这里对应我们加入到资源文件的清单,

//转换回我没的目标值,可能会产生一个拆箱的过程

//如果我们资源文件对应的该清单是一个图片文件System.Drawing.Bitmap bitmap = (System.Drawing.Bitmap)target;

//如果我们的资源文件是光标文件

Cursor cursor = (Cursor)target;

//图标

Icon icon = (Icon)target;

//字符串

string str = target.ToString();//或者manager

manager.GetString("资源文件名");

?

// 通过以上两种操作,就可以从资源文件中进行一个指定资源的加载了。

// 前提是你的资源清单理存在该资源哦。

// 推荐使用第种方法,这种方法也是MS Resx 里对资源文件的操作方法。

// 现在我们已经可以读取资源文件了,现在开始写资源文件的操作。

?

//3. 当然,你可以直接通过设计界面来添加一个资源文件,

// 切记将生成操作改为“嵌入的资源”,Embed

System.Resources.ResourceWriter writer =

new System.Resources.ResourceWriter("dongpad.com.resources");

writer.AddResource("bitmap", Image.FromFile(@"dongpad.bitmap"));

writer.AddResource("cursor", Image.FromFile(@"dongpad.cursor"));

writer.AddResource("ico", Image.FromFile(@"dongpad.ico"));

writer.AddResource("str", Image.FromFile(@"dongpad.str"));

//在这里资源的名称记得要唯一。

writer.Generate();

writer.Close();
?