`

代码阅读总结之Fitch and Mather 7.0(资源文件Resource随笔)

阅读更多

Fitch and Mather 7.0中利用了大量的资源文件

资源文件对创建和本地化提供全面的支持

资源可以包含多种形式的数据,包括字符串、图像和持久的对象

通过在资源文件中存储数据,无需重新编译即可更改数据。

为了将持久对象写入资源文件,这些对象必须是可序列化的。

 

Fitch and Mather 7.0在命名空间FMStocks7.Common中创建了一个ResourcesCollection集会类

此类定义了一个构造器和2个索引器

构造器初始化一个私有的ResourceManager实例

索引用来读取资源文件中的数据

 

在类BLO中,我们看到初始化了一个ResourcesCollection

 

 

 

protected static ResourcesCollection Resources= new ResourcesCollection( Assembly.GetExecutingAssembly() );

因为ResourceManagers 的使用成本较大,所以声明一个静态ResourceManagers(除非有特殊需要才声明多个),并在类级别进行声明,进一步节约内存资源。

 

在类Ticker中通过索引器得到资源文件中记录的数值

private static readonly string DailyVolHeading     = Resources[ "Ticker.DailyVolHeading" ];

 

看了半天知道资源文件的使用,但是我们将怎么创建一个资源文件呢?

经过摸索,我总结如下:

资源文件有2种格式

1.resx(基于 XML 的资源格式)文件

2.公共语言运行库二进制 .resources 文件


 

 

 

创建资源文件的方式有3

1.  .NET Framework 工具资源文件生成器 (Resgen.exe)

Resgen.exe 可以进行下列转换:

.txt 文件转换为 .resources 文件或 .resx 文件。

.resources 文件转换为文本文件或 .resx 文件。

.resx 文件转换为文本文件或 .resources 文件。

 

先创建一个文本文件先创建一个文本文件strings.txt

在里面写下

;1

welcome = Welcome to you

 

;2

par = gogogo

注意:有个分号的行是该文件中的注释,它供自己使用的

 

再到命令窗口中输入

d:\resgen.exe d:\strings.txt d:\strings.resX

这样就成功创建了一个xml形式的资源文件strings.resx

 

2.  利用编程的方式来创建资源文件

创建一个控制台程序

具体代码如下:

 

 

 

using System;
using System.Reflection;
using System.Resources;

namespace ConsoleApplication1
{
    
class Class1
    
{
        [STAThread]
        
static void Main(string[] args)
        
{
            IResourceWriter writer 
= new ResourceWriter("myR.resources");
                Bitmap b 
= new Bitmap("us50.gif");
        
            writer.AddResource(
"String1""one");

            writer.AddResource(
"String2""two");
            
            writer.AddResource(
"pic", b);

            writer.Close();
        }

    }

}

 

这样不仅可以把字符,还可以把图片也放入到资源文件中

运行此控制台会得到资源文件myR.resources

 

1.  通过vs2003来创建资源文件

此方法最简单,我就不多说了

 

创建好资源文件后就可以在自己的项目中引用它们了

特别要注意的是一定要在vs中设定好资源文件的使用属性

生成操作属性要设置为嵌入的资源

见图片:


我又编写了一个控制台程序来引用我的资源文件

代码如下:

 

using System;
using System.Reflection;
using System.Resources;

namespace con2
{
    
class Class1
    
{
        [STAThread]
        
static void Main(string[] args)
        
{
            Assembly ass
=Assembly.GetExecutingAssembly();
            
string name="con2.strings";

            ResourceManager rs
=new ResourceManager(name,ass);

            ResourceManager rsmyR
=new ResourceManager("con2.myR",ass);

            Console.WriteLine(
"strings Resource:" + rs.GetObject("welcome"));

            Console.WriteLine(
"myR Resource:" +rsmyR.GetObject("String2"));
                        
            Console.ReadLine();
        }

    }

}

 

打印出:

Welcome to you

Two

 

特别提示:

ResourceManager类的构造函数的第一个参数是资源的根名称

它由名称空间+资源文件名组成(不要扩展名)

ass.GetManifestResourceNames()方法可以得到所有资源的名称

ass.GetName().Name属性可以得到空间名

 

 


希望上面提到的知识对你有所提示

当然欢迎交流和指正

 

blog:

http://www.cnblogs.com/aierong

author:aierong

email:aierong@126.com


写随笔费时又费力,请尊重作者的权利

谢谢!

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics