如何在C#中使用内嵌资源文件
2个回答
展开全部
当你使用内嵌资源文件时,通常要知道资源的名称.实际上它可以像一个文件名,但是通常会比文件名更复杂一点点.命名一般包括三个部分:<缺省的命名空间.><扩展命命名空间.><文件名>上面的第一部分和最后的第三部分都好理解. 缺省的命名空间就是项目的命名空间,文件名就是资源文件的名称.中间的这部分可能有些迷惑. 简单的讲,扩展命名空间就是项目中的目录结构.如果你的资源文件就在项目的根目录下,扩展命名空间就不需要了,直接这样写就可以了. <缺省的命名空间.> <文件名>. 但是如果你在项目中产生目录结果的话,就要使用使用扩展命名空间了.比如你在项目的根目录下产生了一个Images目录,那么资源文件就要这样来表示: <缺省的命名空间.> Images.<文件名>. 如果你在Images路径下还有一个目录FormGraphics,那么资源文件就要这样表示: <缺省的命名空间.> Images.FormGraphics.<文件名>我想大家可能已经发现了上面的规律,在代码中你也可以这么写.当你在目录下使用VS自动产生了类,它也是安装这样的方式来命名类的名称. <缺省的命名空间.><扩展命命名空间.>. 虽然你可以手工的修改代码中的命名空间,但是有一点要记住,是不可以修改内嵌资源文件的命名空间结构的.如何得到资源普通方法普通的使用内嵌资源文件的方法是使用Assembly类的GetManifestResource方法.在第一个演示程序中,我们会使用下面这两个方法GetManifestResourceNames, GetManifestResourceStream这个演示程序会列举出一个装配件中的资源,可以把存选中的资源保到一个文件中.如果资源是一个图象,在程序中就可以显示出来.如果你还没有一个内嵌资源的装配件,第二个演示程序就是一个含有资源的装配件. 这是在ListBox的 ListBox's SelectedIndexChanged 事件中,如果出来资源System.IO.Stream stream = loadedAssembly.GetManifestResourceStream( (string) resources.SelectedItem); System.Drawing.Image img = Image.FromStream(stream);上面的演示程序把一个装配件调入内存,在loadedAssembly变量中存储一个Assembly实例.也许在你的应用程序中,不需要调用其他装配件的资源,你只是想能从你自己的程序中得到资源.最简单的方法是使用Type类的Assembly属性来得到某一个类的一个实例,你可以用下面的方法来得到Type,如果是一个类,使用typeof(<class>),如果是一个类的实例变量,使用GetType().另一种实现方法GetManifestResourceStream有两种重载方法,一种是从一个资源文件中来得到一个Stream对象, 另一个中使用Type和string. 第二个会帮助我们得到可以使用的资源.它会根据清单资源的范围由指定类型的命名空间确定资源清单第二个演示程序是利用上面说得第二个方法来实现的. 总结当你理解了上面的内容后,对于VS.net内嵌资源的使用就是易于反掌了.唯一要注意的地方就是找出VS.Net给你的资源文件的名字.
展开全部
直接使用本地文件
1、将图片和文件加入项目(可单独建目录存放他们,如Resources),例如:
progress.gif和textFile.txt
2、将图片和文件的生成操作设置为:嵌入的资源。
3、使用GetManifestResourceStream()方法读取资源:
System.Reflection.Assembly asm = System.Reflection.Assembly.GetEntryAssembly();
System.IO.Stream imgStream = asm.GetManifestResourceStream("MyNamespace.Resources.progress.gif");
pictureBox1.Image = System.Drawing.Image.FromStream(stream);
System.IO.StreamReader txtStream = new System.IO.StreamReader(_assembly.GetManifestResourceStream("MyNameSpace.Resources.textFile.txt"));
textBox1.Text = txtStream.ReadLine();
备注:如果资源存放在单独的Resouces目录中,则GetManifestResourceStream()方法的参数为:"MyNamespace.Resources.progress.gif";
如果直接在项目根目录下,则为"MyNamespace.progress.gif"。
即参数的命名规则为:项目的命名空间.资源子目录名.资源子目录名.…….文件名.扩展名,资源子目录可以有多层,也可以没有。
1、将图片和文件加入项目(可单独建目录存放他们,如Resources),例如:
progress.gif和textFile.txt
2、将图片和文件的生成操作设置为:嵌入的资源。
3、使用GetManifestResourceStream()方法读取资源:
System.Reflection.Assembly asm = System.Reflection.Assembly.GetEntryAssembly();
System.IO.Stream imgStream = asm.GetManifestResourceStream("MyNamespace.Resources.progress.gif");
pictureBox1.Image = System.Drawing.Image.FromStream(stream);
System.IO.StreamReader txtStream = new System.IO.StreamReader(_assembly.GetManifestResourceStream("MyNameSpace.Resources.textFile.txt"));
textBox1.Text = txtStream.ReadLine();
备注:如果资源存放在单独的Resouces目录中,则GetManifestResourceStream()方法的参数为:"MyNamespace.Resources.progress.gif";
如果直接在项目根目录下,则为"MyNamespace.progress.gif"。
即参数的命名规则为:项目的命名空间.资源子目录名.资源子目录名.…….文件名.扩展名,资源子目录可以有多层,也可以没有。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询