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裡面的例子程式有一個打包工具,對其進行編譯就可以用了。
相關詞條
-
resx
et除了.resx資源檔案格式外,還有一個.resources的資源檔案格式。 創建一個ResourceWriter的對象用於寫資源檔案。 System...
-
MemoryStream
resx 檔案或 .resources 檔案中,則可在運行時調用...
-
特隆:進化
在 [SystemSettings] 段中修改 resx...
簡介 遊戲介紹 遊戲配置 主要特點 遊戲評測 -
C#必須知道的300個問題
.resx分別是什麼? 8 問題7 怎樣設定斷點,設定斷點有...
作者:明日科技 -
Sisulizer
應用程式;其還支持ResX以及二進制資源庫進行本地化。可在在原工程中翻譯...
簡介與套用 功能亮點 功能簡介 企業級功能 產品及版本介紹 -
C#資源檔案轉換工具
工具,可以批量轉換C#Resouces檔案到Resx檔案工具,自己寫...
-
ASP.NET 3.5 SP1高級編程
內容介紹《ASP.NET 3.5 SP1高級編程(第6版)》是ASP.NET名著的升級版,與上一版相比,本版內容更全面、技術更新...
內容介紹 作品目錄