从资源文件里加载文件(C#)

加载

1.概述:
 
资源文件很早就有了,在。Net时代里这个东西也不算稀奇,在进行多国语言化的时候
通常把不同翻译的文字存放到资源包里。以前资源文件除了放字符串以外,还可以放文件。不过在C#的工程里面,资源管理面板是空的(vc++工程里资源面板可以使用),无法直接编辑资源属性,不过每个WinForm都会带一个.resx的文件,这个文件就是WinForm的资源文件。如果通过添加新项目的方法,给工程里添加资源文件的话,产生的也是.resx文件。估计.resx文件是.net给c#新设计的资源文件格式。.resx以XML格式保存,主要存放字符串。对于文件我还没有找到添加到.resx的方法,因此我们需要用其它方法把文件打包到资源文件里面。
 
2.资源文件打包
 
       。net除了.resx资源文件格式外,还有一个.resources的资源文件格式。它可以支持把文件的加载,需要做通常的做法如下:
     System.Resources.ResourceWriter rw = new ResourceWriter(@"..\..\abc.resources");
     rw.AddResource("abc", new byte[10000000]);
     rw.Generate();
     rw.Close();
创建一个ResourceWriter的对象用于写资源文件。文件的后缀名必须是.resources,不让其它的系统无法识别。然后是通过AddResource的方法写资源信息,这个信息可以是一个字符串,也可以是一个byte数组,甚至可以是一个对象(image)。添加好以后就是Generate和close了。这样运行程序后,资源文件就制作完成了。
如果不需要把这个资源文件打包到exe程序或者dll程序里面,可以使用System.Resources.ResourceReader读取资源文件信息。
 
3.获取资源文件
 
资源文件打包好以后,下一步是把资源文件集成到项目里。方法有两个,一个是用控制台的方式编译项目,通过加载资源文件的方式把资源加载到exe里,另外一个简单很多,就是把直接把资源文件加载到工程里,vs会根据后缀名识别出来加载的文件属于资源文件,在进行编译的时候会自动把这个文件打包到资源文件里。如果编译后发现资源文件没有加到exe文件,可以设置资源文件的属性,把Build Action的属性设置为Embedded Resource。
 
资源文件成功加到exe文件后,下一步就是在程序里读取资源文件。
     System.Resources.ResourceManager rm = new System.Resources.ResourceManager("Resunce.abc", this.GetType().Assembly);
     byte[] bit = rm.GetObject("abc") as byte[];
 
通常是创建一个ResourceManager的对象,第一个参数是资源的名字,这里要注意的是“Resunce”是编译的时候,组件(命名空间)名字,“abc”是资源文件的名字。如果前面不是通过VS的工程文件进行编译,而是通过控制台方式直接编译,那么资源的名字不需要带组件的名字,只是“abc”就可以了。原因吗,我估计可能是vs在进行编译的时候,带了某些参数(确定了组件名),所以在项目读取资源文件的时候需要带组件名。
 
4.资源文件打包工具
在资源文件里加载文件就两个操作,一个是创建资源文件,一个是读取资源文件。在创建资源文件的时候如果没有什么特殊要求,可以通过资源打包工具来创建。在SDK里面的例子程序有一个打包工具,对其进行编译就可以用了。编译地址:Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Samples\Tutorials\resourcesandlocalization\reseditor

时间: 2024-12-01 01:01:39

从资源文件里加载文件(C#)的相关文章

ASP.NET(C#) Web Api通过文件流下载文件的实例_实用技巧

下载文件到本地是很多项目开发中需要实现的一个很简单的功能.说简单,是从具体的代码实现上来说的,.NET的文件下载方式有很多种,本示例给大家介绍的是ASP.NET Web Api方式返回HttpResponseMessage下载文件到本地.实现的方法很简单,其中就是读取服务器的指定路径文件流,将其做为返回的HttpResponseMessage的Content.直接贴出DownloadController控件器的代码: using System; using System.Collections.

resx文件在X64位编译,提示“未能加载文件或程序集”的问题?

原文:resx文件在X64位编译,提示"未能加载文件或程序集"的问题? resx文件在X64位编译,提示"未能加载文件或程序集"的问题? 解答: 错误现象如下 此问题最多在VS2010或者(SP1)上出现过,属于VS2010的缺陷,估计在VS更高的版本不会出现此问题. 通常提示: <dataname="imageCollection1.ImageStream" type="xxxxxx"mimetype="ap

控件注册 - 利用资源文件将dll、ocx打包进exe文件(C#版)

原文:控件注册 - 利用资源文件将dll.ocx打包进exe文件(C#版)       很多时候自定义或者引用控件都需要注册才能使用,但是如何使要注册的dll或ocx打包到exe中,使用户下载以后看到的只是一个exe,点击直接运行呢?就像很多安全控件,如支付宝的aliedit.exe那样.         现在介绍一种使用资源文件,将dll.ocx打包进exe,点击直接注册的例子:       首先,新建一个工程RegisterFile.  新建文件夹Resource,里面添加需要注册的ocx或

未能加载文件或程序集“EnvDTE, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”或它的某一个依赖项。系统找不到指定的文件。

问题描述 未能加载文件或程序集"EnvDTE,Version=8.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a"或它的某一个依赖项.系统找不到指定的文件.说明:执行当前Web请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息.异常详细信息:System.IO.FileNotFoundException:未能加载文件或程序集"EnvDTE,Version=8.0.0.0

未能加载文件或程序集“Excel”或它的某一个依赖项。另一个程序正在使用此文件,进程无法访问。 (异常来自 HRESULT:0x80070020)

问题描述 未能加载文件或程序集"Excel"或它的某一个依赖项.另一个程序正在使用此文件,进程无法访问.(异常来自HRESULT:0x80070020)我的电脑不知道是怎么了,只是要外部引用的DLL,每次打开VS都会报这种错误,每次都是删除这个DLL,再重新引用,不行,再重起电脑,再删除,再重新引用...代码在其它电脑就不会有这种问题了....求大神指点.. 解决方案 解决方案二:你应该是用了excel的组件,然后没有从内存中释放...但是没道理啊,重启电脑还要再删除一次?解决方案三:

打开.edmx文件提示未能加载文件或程序集

问题描述 打开.edmx文件提示未能加载文件或程序集"Microsoft.Data.Entity.Design.Extensibility,version=10.0.0.0,Cultutre=neutral,PublicKeyToken=b035f7f11d50a3a"或他的某个依赖项.系统找不到指定文件 解决方案 解决方案二:自己顶下...解决方案三: 解决方案四:dll都引用了啊..

josn的序列化例子,未能加载文件或程序集“System.Runtime.Serialization,或它的某一个依赖项。系统找不到指定的文件

问题描述 做了个json序列化的例子,却运行在DataContractJsonSerializerser=newDataContractJsonSerializer(typeof(T))时;报错未能加载文件或程序集"System.Runtime.Serialization,Version=2.0.5.0,Culture=neutral,PublicKeyToken=7cec85d7bea7798e"或它的某一个依赖项.系统找不到指定的文件怎么解决这个问题呀? 解决方案 解决方案二:少了

C#窗体中怎样用Windows media player控件播放资源文件中的视频??

问题描述 一个C#窗体应用程序,添加了一个WindowsmediaPlayer控件和flash控件,资源文件中有flv格式的视频和swf的动画,程序通过按钮来选择播放视频或动画.我该怎样调用资源文件,网上有人说axWindowsMediaPlayer不能引用资源文件,因为axWindowsMediaPlayer1.URL指定的是字符串,怎样将资源中的文件的路径取出来给axWindowsMediaPlayer1.URL赋值,还有人说将需要用到的文件和exe放到一起,那程序拷到别人电脑上还能用吗?实

未能加载文件或程序集“DreamweaverCtrls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=83

问题描述 我在用DW做毕业设计,在预览页面时出现如下问题,请各位高手帮帮忙"/xywz"应用程序中的服务器错误.--------------------------------------------------------------------------------分析器错误说明:在分析向此请求提供服务所需资源时出错.请检查下列特定分析错误详细信息并适当地修改源文件.分析器错误信息:未能加载文件或程序集"DreamweaverCtrls,Version=1.0.0.0,