從資源檔裡負載檔案(C#)
用途:
1. 在進行多國語言化的時候.( 通常把不同翻譯的文字存放到資源套件裡.)
2. 將圖片打包進DLL的時候(icon等,自訂控制項..)
資源檔格式: .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讀取資源檔資訊。
擷取資源檔
資源檔打包好以後,下一步是把資源檔整合到項目裡。方法有兩個,一個是用控制台的方式編譯項目,通過載入資源檔的方式把資源載入到exe裡,另外一個簡單很多,就是把直接把資源檔載入到工程裡,vs會根據尾碼名識別出來載入的檔案屬於資源檔,在進行編譯的時候會自動把這個檔案打包到資源檔裡。如果編譯後發現資源檔沒有加到exe檔案,可以設定資源檔的屬性,把Build Action的屬性設定為Embedded Resource。
在當前項目中讀取資源:
this.Icon = Properties.Resources.exeIcon;||
this.Text = Resource1.String1.ToString();//主要是字串
資源檔成功加到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在進行編譯的時候,帶了某些參數(確定了組件名),所以在項目讀取資源檔的時候需要帶組件名。