日期:2014-05-17 浏览次数:21247 次
//
在这里,我来总结一下关于资源文件的相关操作。
? //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();
?