如何在C#中使用内嵌资源文件

本文详细介绍了如何在C#中使用内嵌资源文件,包括资源的命名规则、获取资源的方法以及创建和使用资源文件的步骤。通过示例代码展示了如何将图片、图标和字符串添加到资源文件,以及如何在程序中读取和使用这些资源。
摘要由CSDN通过智能技术生成

 

在好多的C#和 .Net的论坛中都会提到如何使用内嵌资源的话题,对大多一般的数项目来说,这也许更不就不是一个问题.但是,对于一些复杂的项目,这也许就成了问题.本文会把论坛中的内容汇总一下,比起查询论坛来,文章显得更容易查找和连接.

第一件清楚的事情

在VS.Net中,有多种使用资源文件的方法,最常用的方法是让Form来保存它所使用的资源文件,这个可以通过产生一个.resx文件来保存Form所用到的资源.本文不是讨论这个话题,因为通常开发人员不会关心这个简单的问题.

第二种方法是使用资源文件,本文重点在这儿,包括如何在资源文件中添加文件,如何设置内嵌资源的”生成类型”.

名称是如何规定的?

当你使用内嵌资源文件时,通常要知道资源的名称.实际上它可以像一个文件名,但是通常会比文件名更复杂一点点.

命名一般包括三个部分: <缺省的命名空间.> <扩展命命名空间.> <文件名>

上面的第一部分和最后的第三部分都好理解. 缺省的命名空间就是项目的命名空间,文件名就是资源文件的名称.中间的这部分可能有些迷惑.

简单的讲,扩展命名空间就是项目中的目录结构.如果你的资源文件就在项目的根目录下,扩展命名空间就不需要了,直接这样写就可以了. <缺省的命名空间.> <文件名> . 但是如果你在项目中产生目录结果的话,就要使用使用扩展命名空间了.比如你在项目的根目录下产生了一个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( ),如果是一个类的实例变量,使用GetType().

另一种实现方法

GetManifestResourceStream有两种重载方法,一种是从一个资源文件中来得到一个Stream对象, 另一个中使用Type和string. 第二个会帮助我们得到可以使用的资源.它会根据清单资源的范围由指定类型的命名空间确定资源清单

第二个演示程序是利用上面说得第二个方法来实现的.

总结

当你理解了上面的内容后,对于VS.net内嵌资源的使用就是易于反掌了.唯一要注意的地方就是找出VS.Net给你的资源文件的名字.

=====

转自:http://chinacgonlinedocuments.spaces.live.com/blog/cns!DAD7ADAED5CC1F1B!155.entry

C#使用資源文件

using System;
using System.Drawing;
using System.Resources;
public class SampleClass
{
public static void Main()
{
try
{

        //定義一個jpeg類型,讀入jpeg文件
Image img = Image.FromFile("gsm.jpg");        
創建資源文件

         ResXResourceWriter rsxw = new ResXResourceWriter("gsm.resx");

       //增加資源
rsxw.AddResource("gsm.jpg",img);
img = Image.FromFile("name.jpg");        
rsxw.AddResource("name.jpg",img);
創建各類資源

        Icon icon = new Icon("gsm.ico");
逐個添加

         rsxw.AddResource("gsm.jpg",icon);
rsxw.Close();
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
}
}

然後用resgen gsm.resx gsm.resources生成資源文件

在csc編譯中制定資源文件gsm.resources

然後是使用資源。正在學習。

====

转自:http://www.faq-it.org/archives/csharp/de9b744e1f9894ca333c5dc41e3666b8.php

如何用Visual C#使用资源文件中资源
要释放内嵌源文件到指定位置,你可以使用以下步骤: 1. 确保你的源文件已经嵌入到了程序集。可以在 Visual Studio 源文件管理器确认。 2. 使用 `Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)` 方法获取嵌入源的流。其 `resourceName` 是你的源文件的完整名称,包括命名空间和文件名。 3. 创建一个新的文件流,指定你想要将源文件释放到的位置。 4. 通过将嵌入源的流复制到新的文件,将源文件释放到指定位置。你可以使用 `Stream.CopyTo()` 方法来实现这一点。 下面是一个示例代码,展示了如何释放内嵌源文件到指定位置: ```csharp using System; using System.IO; using System.Reflection; public class ResourceManager { public static void ExtractResourceToFile(string resourceName, string targetPath) { using (Stream resourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) { if (resourceStream == null) { throw new ArgumentException($"Resource '{resourceName}' not found."); } using (FileStream fileStream = File.Create(targetPath)) { resourceStream.CopyTo(fileStream); } } } } ``` 你可以调用 `ResourceManager.ExtractResourceToFile(resourceName, targetPath)` 方法,将源文件释放到指定位置。其 `resourceName` 是嵌入源的完整名称,`targetPath` 是要释放到的目标位置的文件路径。 希望这能帮助到你!如果有任何问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值