實例講解.NET中資源文件的創建與使用(轉)

文章轉自:http://www.iwms.net/n1032c12.aspx

 

 

一、資源文件

資源文件顧名思義就是存放資源的文件。資源文件在程序設計中有着自身獨特的優勢,他獨立於源程序,這樣資源文件就可以被多個程序使用。同時在程序設計的時候,有時出於安全或者其他方面因素的考慮,把重要東西存放在資源文件中,也可以達到保密、安全的效果。那麼Visual C#所使用的資源文件中到底存放哪些東西呢?在用Visual C#創建資源文件大致可以存放三種類型的數據資源,分別是字節數組、各種對象和字符串。本文將結合一個程序例子來具體說明用Visual C#是如何創建資源文件的。

二、創建資源文件所用的類

.Net FrameWork SDK中的一個名字叫System.Resources名稱空間,在此名稱空間中爲應用程序提供了許多創建、存儲和使用資源文件的類和接口。其中有一個類叫ResourceWriterVisual C#就是通過調用這個類來實現創建、存儲資源文件的。

三、創建資源文件的方法

首先要繼承一個ResourceWriter類,然後調用ResourceWriter類的一個方法Generate ( ),就可以產生一個資源文件了。具體語句如下:

ResourceWriter rw = new ResourceWriter ( "My.resources" ) ;

rw.Generate ( ) ;

此時在磁盤的中就會產生一個名稱爲"My.resources"的資源文件,但此時的資源文件沒有任何內容,下面我們就來看看如何往資源文件中添加資源。

 

四、往資源文件中添加資源的方法
      
ResourceWriter類中提供了一個AddResource ( )方法,這個方法的作用就是往資源文件中添加資源的。在Visual C#中對不同的資源有着不同的加入方式。

1.加入字節數組,語法格式爲:

public void AddResource ( string , byte [ ] ) ;

註釋:其中string是在使用資源文件的時候,此字節數組在程序中的的唯一標識符

2.加入對象,語法格式爲:

public void AddResource ( string , object );

註釋:其中string是在使用資源文件的時候,此對象在程序中的唯一標識符。如:
Image image1 = Image.FromFile ("abc1.jpg") ;

Image image2 = Image.FromFile ( "abc2.jpg" ) ;                           

rw.AddResource ( "abc1" , image1 ) ;

rw.AddResource ( "abc2" , image2 ) ;

3.加入字符串,具體語法如下:

public void AddResource ( string1 , string2) ;

註釋:其中string1是在使用資源文件的時候,此字符串在程序中的唯一標識符在本文的程序中,是如此使用的:

rw.AddResource ( "MyStr" , "從資源文件中讀取字符串!" );

至此我們已經創建了一個資源文件,並且在資源文件中加入了若干個資源,當然在這之後,還應該注意,保存此資源文件,並關閉資源文件,具體如下:

rw.Close ( ) ;

五、示例創建資源文件

       在這裏創建一個什麼樣的工程好呢?有些朋友可能會用.net創建一個“控制檯應用程序”,其實沒必要,直接用記事本創建一個CS文件就可以了,假如名稱爲:CreatResources.cs。編譯命令:csc CreatResources.cs;運行:CreatResources。這時會產生一個叫做My.resources的資源文件。先放到這裏,等下再用。

using System ;

using System.Drawing ;

using System.Resources ;

 

class CreatResource

{

       public static void Main ( )

       {

              ResourceWriter rw = new ResourceWriter ( "My.resources" ) ;

             

              Image image1 = Image.FromFile ("abc1.jpg") ;

              Image image2 = Image.FromFile ( "abc2.jpg" ) ;

                           

              rw.AddResource ( "abc1" , image1 ) ;

              rw.AddResource ( "abc2" , image2 ) ;

             

              Icon ic = new Icon("CDDRIVE.ICO");

              rw.AddResource( "abc3",ic);

              rw.AddResource( "abc4","這是從資源文件中讀出的字符");

             

              rw.Generate ( ) ;

              rw.Close ( ) ;

       }

}

 

六、將生成的資源文件添加測試工程中的方法
      
創建一個“Windows應用程序”測試工程,將My.resources資源文件添加到該工程中,步驟如下:

       1,在資源管理器裏選中文件

2,按住鼠標左鍵,拖到工程文件上,鬆開鼠標左鍵。

3,在拖放的文件上點鼠標右鍵,選“屬性”

4,在生成操作裏選擇“嵌入的資源”。

 

七、如何在程序中管理資源文件中的資源

       .Net FrameWork SDK這提供了一個關於資源文件創建和使用的名稱空間--System.Resources。在這個名稱空間中有一個ClassResourceManager,這個Class的主要作用就是管理並使用資源文件。Visual C#是通過這個類來管理並使用嵌入程序中的資源文件中的資源。下列代碼就是定義一個ResourceManager類來管理嵌入程序資源文件中的資源:

ResourceManager rm = new ResourceManager ( " Res.My " , Assembly.GetExecutingAssembly ( ) ) ;

       注意:ResourceManager rm = new ResourceManager ( " Res.My " , Assembly.GetExecutingAssembly ( ) ) ;語句中,構造函數的第一個參數Res.My 由兩部分構成,Res表示測試工程的命名空間,My表示資源文件名My.resources的根名稱,即點號有前部分My

 

八、如何在程序中使用資源文件中的資源

在上一篇文章中,我們已經瞭解到在創建資源文件的時候,使用了AddResource ( )方法來加入資源,他的語法中的第一個參數是用戶可以定義的字符串,這個字符串就是資源在資源文件的唯一標識,在程序設計中,就是通過這個唯一標識符來使用某個資源的。那麼如何在程序中通過這個標識符來得到所需資源?這就要使用到ResourceManager類中的GetObject()和GetString()方法。這二個方法作用是獲得指定的資源。下面是這二個方法的語法:

object GetStingString

object GetObjectString

其中的"String"就是資源在資源文件中的那個唯一標識符。細心的讀者可能已經注意到,這二個方法的返回值都是一個Object類型的變量,也就是一個參考類型的變量,而在程序中的字符串或者圖象等,是一個實值類型變量。這就需要進行轉換,而這種轉換就是上面所說的裝箱和出箱。下列代碼是從資源文件中提取字符串、圖象和圖標資源:

提取字符串資源:

String s = ( ( String ) rm.GetString ( "MyStr" ) ) ;

提取圖標資源:

Icon icoDemo = ( ( Icon ) rm.GetObject ( "demo.ico" ) ) ;

提取圖象資源:

Image a = ( ( Image ) ( rm.GetObject ( "ok-off.png" ) ) ) ;

 

九、測試工程源代碼

 

 

 

從資源文件里加載文件(C#

內容轉自:http://www.webasp.net/article/29/28130.htm

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章