C#读取嵌入资源(程序集清单资源)
2014-04-13 15:51
369 查看
一、添加嵌入的资源
1、新建一窗体应用程序,用于演示该程序集运行时访问嵌入资源
2、用鼠标右键单击项目名称,单击添加,添加新建项,然后单击添加新项。
3、在新建项目对话框中,从菜单上,选择文本文件,并命名为
MyTextFile.txt 的文件。在集成的开发环境 (IDE) 中打开文本文件,添加一些文本,比如"abc",然后关闭该文件。
4、重复步骤
2 和 3 将位图图像添加到项目中,但在选择新的项目类型时不是选择文本文件,而是选择位图文件,然后将文件名更改为MyImage.bmp。在
IDE 中打开新图像, 绘制一些内容,然后关闭该文件。
5、用鼠标右键单击文本文件或位图,然后选择属性。
6、在属性对话框中,找到生成操作属性。默认情况下,此属性设置为内容。请单击该属性并将生成操作属性更改为嵌入的资源。
7、其他文件重复步骤
4 和 5。
下次生成项目时,编译器会将这些文件添加到您的程序集。
注:
资源文件名称是区分大小写。当您访问的资源时, 必须使用完全相同的拼写和大小写的文件名称。如果您不使用精确拼写和大小写的文件名访问 ManifestResourceStream 方法调用返回 Nothing 和系统不引发异常。
若要访问嵌入的清单的程序集的资源,导入System.IO和System.Reflection的命名空间,如下:
在常规声明区域中定义如下代码,在加载窗体时会读取程序集中的资源:
若要读取当前程序集的资源,必须获取该程序集的一个实例。若要执行此操作,使用GetExecutingAssembly方法,如下所示:
GetManifestResourceStream方法从资源中读取信息到流中。传递给此方法的参数是要访问的资源的名称
注:里面的格式为: 命名空间.相对文件夹名.文件名(包含扩展名)。
在该窗体的Load事件中,首先获取资源所在程序集,然后读取两个资源到其相应的流。
三、显示资源
此示例使用两个按钮以显示嵌入的资源。单击第一个按钮时,从程序集中读取位图图像并显示在窗体的图片框控件。第二个按钮读取文本资源,并在文本框中显示文本。
若要显示嵌入的资源,请执行以下步骤:
向表单中添加一个图片框控件。
向窗体中,添加一个新按钮控件,然后将它的Text属性更改为显示图像。
双击该按钮以打开其Click事件,在代码查看器中,然后将以下代码粘贴在这种情况:
此代码会生成新的基于窗体的Load事件中读取资源流的位图的实例。
向表单中添加文本框控件。
将另一个按钮控件添加到窗体中,然后再将它的Text属性更改为获取文本。
双击设计编辑器中打开Click_Event按钮,该按钮,然后将以下代码粘贴在该事件中:
此代码将确定要读取的字符是否仍然存在在流中。如果找到字符,文本框中将读取一行。
按 F5 键运行该应用程序。
1、新建一窗体应用程序,用于演示该程序集运行时访问嵌入资源
2、用鼠标右键单击项目名称,单击添加,添加新建项,然后单击添加新项。
3、在新建项目对话框中,从菜单上,选择文本文件,并命名为
MyTextFile.txt 的文件。在集成的开发环境 (IDE) 中打开文本文件,添加一些文本,比如"abc",然后关闭该文件。
4、重复步骤
2 和 3 将位图图像添加到项目中,但在选择新的项目类型时不是选择文本文件,而是选择位图文件,然后将文件名更改为MyImage.bmp。在
IDE 中打开新图像, 绘制一些内容,然后关闭该文件。
5、用鼠标右键单击文本文件或位图,然后选择属性。
6、在属性对话框中,找到生成操作属性。默认情况下,此属性设置为内容。请单击该属性并将生成操作属性更改为嵌入的资源。
7、其他文件重复步骤
4 和 5。
下次生成项目时,编译器会将这些文件添加到您的程序集。
注:
资源文件名称是区分大小写。当您访问的资源时, 必须使用完全相同的拼写和大小写的文件名称。如果您不使用精确拼写和大小写的文件名访问 ManifestResourceStream 方法调用返回 Nothing 和系统不引发异常。
二、访问资源
若要访问嵌入的清单的程序集的资源,导入System.IO和System.Reflection的命名空间,如下:using System.IO; using System.Reflection;
在常规声明区域中定义如下代码,在加载窗体时会读取程序集中的资源:
Assembly _assembly; Stream _imageStream; StreamReader _textStreamReader;
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using System.Reflection; namespace ResTest { public partial class Form1 : Form { Assembly _assembly ; Stream _imageStream; StreamReader _textStreamReader; public Form1() { InitializeComponent(); } } }双击窗体进入窗体的Load事件
若要读取当前程序集的资源,必须获取该程序集的一个实例。若要执行此操作,使用GetExecutingAssembly方法,如下所示:
_assembly = Assembly.GetExecutingAssembly();
GetManifestResourceStream方法从资源中读取信息到流中。传递给此方法的参数是要访问的资源的名称
注:里面的格式为: 命名空间.相对文件夹名.文件名(包含扩展名)。
在该窗体的Load事件中,首先获取资源所在程序集,然后读取两个资源到其相应的流。
_imageStream = _assembly.GetManifestResourceStream("MyNameSpace.MyImage.bmp"); _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("MyNameSpace.MyTextFile.txt"));
private void Form1_Load(object sender, EventArgs e) { try { _assembly = Assembly.GetExecutingAssembly();//获取当前执行代码的程序集 _imageStream = _assembly.GetManifestResourceStream("ResTest.MyImage.bmp"); _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("ResTest.MyTextFile.txt")); } catch { MessageBox.Show("访问资源错误"); } }
三、显示资源
此示例使用两个按钮以显示嵌入的资源。单击第一个按钮时,从程序集中读取位图图像并显示在窗体的图片框控件。第二个按钮读取文本资源,并在文本框中显示文本。
若要显示嵌入的资源,请执行以下步骤:
向表单中添加一个图片框控件。
向窗体中,添加一个新按钮控件,然后将它的Text属性更改为显示图像。
双击该按钮以打开其Click事件,在代码查看器中,然后将以下代码粘贴在这种情况:
try { pictureBox1.Image = new Bitmap(_imageStream); } catch { MessageBox.Show("Error creating image!"); }
此代码会生成新的基于窗体的Load事件中读取资源流的位图的实例。
向表单中添加文本框控件。
将另一个按钮控件添加到窗体中,然后再将它的Text属性更改为获取文本。
双击设计编辑器中打开Click_Event按钮,该按钮,然后将以下代码粘贴在该事件中:
try { if(_textStreamReader.Peek() != -1) { textBox1.Text = _textStreamReader.ReadLine(); } } catch { MessageBox.Show("Error writing text!"); }
此代码将确定要读取的字符是否仍然存在在流中。如果找到字符,文本框中将读取一行。
按 F5 键运行该应用程序。
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; using System.Reflection; namespace ResTest { public partial class Form1 : Form { Assembly _assembly ; Stream _imageStream; StreamReader _textStreamReader; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { try { pictureBox1.Image = new Bitmap(_imageStream); } catch { MessageBox.Show("创建图像错误"); } } private void Form1_Load(object sender, EventArgs e) { try { _assembly = Assembly.GetExecutingAssembly();//获取当前执行代码的程序集 _imageStream = _assembly.GetManifestResourceStream("ResTest.MyImage.bmp"); _textStreamReader = new StreamReader(_assembly.GetManifestResourceStream("ResTest.MyTextFile.txt")); } catch { MessageBox.Show("访问资源错误"); } } private void button2_Click(object sender, EventArgs e) { try { if (_textStreamReader.Peek() != -1) { textBox1.Text = _textStreamReader.ReadLine(); } } catch { MessageBox.Show("写入文本错误"); } } } }
相关文章推荐
- C#读取嵌入资源(Resx强类型资源)
- Apache Web服务器资源使用限制配置
- 免费论文资源
- IOS绑定资源到BitmapData
- 分享:Python: 数据分析资源
- 程序员开发游戏使用的背景图片素材资源合辑
- 动态库中使用对话框资源
- 循环获得drawable资源里面的图片索引ID
- UIWebView来加载资源包问题
- java常见的内存资源分析、性能分析工具有哪些?
- Oracle性能优化之资源管理_超越OCP精通Oracle视频教程培训36
- spark 资源参数调优
- 《Programming WPF》翻译 第6章 2.资源与样式
- (转)使用SE String Resouce制作多国语言程序资源文件
- android工程中,有各种类型的资源文件總結
- 外部资源复制
- 我的Android进阶之旅------>Android资源文件string.xml中\u2026的意思
- 多个线程同时访问资源
- 资源下载列表
- 深度学习卷积网络的资源