关于资源文件

来源:未知 责任编辑:责任编辑 发表时间:2014-04-20 03:40 点击:

关于资源文件
现实生活中某些exe或者dll文件需要依赖其它文件得以正常运行,此时如果把该文件直接拷贝到客户端,然后程序内部用相对路径读取不一定是很好的方案(因为一旦客户删除了这些资源,程序可能出现不可预见的效果)。所以这些文件必须被嵌入exe或者dll中,和发布程序融合为一体。这时,“资源文件”往往是我们的首选。

在.NET(C#或者VB.NET)中,我们可以使用两种大的方案创建资源文件:

1)直接创建(拷贝一个普通的文件到项目中,设定其BuildAction为"Embeded Resource"即可;此时,当编译整个工程的时候,该文件被当成一种特殊的“资源文件”(本质上是编译器解析成二进制代码,因为所有文件都可以被视为二进制代码进行读入、写入,计算机内部CPU也是只认得二进制代码的)和exe混合在一起,存放在特殊的区域中。

要读取此类资源文件,方法是使用Assembly.GetManifestResourceStream。注意该方法有两个版本的重载函数:

i)第一个重载函数只需要一个string(是当前工程的Namespace.[文件夹名1.……文件夹名N].被嵌入的文件名称.扩展名)。

ii)第二个重载函数需要一个当前可执行程序的类type(接受这个参数,类似获取第i中方法的项目Namespace;后面的string就是.[文件夹名1.……文件夹名N].文件名称.扩展名)。

【例子】

假设我的项目如下(其中Desert.jpg已经设置为Embeded Resource,项目的Namespace和项目自身同名,为WinFormCSharp),现在要求读取并且作为Form1图片背景显示。

  \

 

思路分析:
因为Desert.jpg在Resources文件夹中,因此直接这样写:
[C#]
Assembly asm = Assembly.GetExecutingAssembly();  //获取当前正在运行的Assembly
this.BackgroundImage = Image.FromStream(asm.GetManifestResourceStream("WinFormCSharp.Resources.Desert.jpg"));
//你也可以:
this.BackgroundImage = Image.FromStream(asm.GetManifestResourceStream(typeof(Form1),"Resources.Desert.jpg"));

[VB.NET]
Dim asm As Assembly = Assembly.GetExecutingAssembly()
'获取当前正在运行的Assembly
Me.BackgroundImage = Image.FromStream(asm.GetManifestResourceStream("WinFormCSharp.Resources.Desert.jpg")
'你也可以:
Me.BackgroundImage = Image.FromStream(asm.GetManifestResourceStream(GetType(Form1),"Resources.Desert.jpg"))

注意1:为确保Namespace的准确性(考虑某些项目名称和实际的Namespace不吻合),获取当前运行的项目程序Namespace的方法是:
[C#]
string s = asm.GetName().Name;
[VB.NET]
Dim s As String = asm.GetName().Name
然后使用s和示例程序进行拼接即可。

注意2:你也可以使用GetManifestResourceNames()检查所有嵌入项目中的资源,进一步判断需要取舍哪(个、些)资源。返回结果是string数组:
[C#]
 foreach (var item in asm.GetManifestResourceNames())
            {
                MessageBox.Show(item.ToString());
            }

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • 浅析.NET下XML数据访问新机制
  • asp.net 面试+笔试题目第1/2页
  • C# 邮件地址是否合法的验证
  • C#高级编程:数据库连接[1]
  • asp.net 设置GridView的选中行的实现代码
  • 经典C++程序1
  • IIS 自动回收导致后台定时器失效的问题解决
  • ASP.NET GridView列表代码示例
  • 微软ASP.NET站点部署指南(3):使用Web.Config文件的Transforma
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1