1. 程式人生 > >從資原始檔里加載檔案或讀取資源(C#)

從資原始檔里加載檔案或讀取資源(C#)

http://blog.csdn.net/xochenlin/article/details/3240939

從資原始檔里加載檔案(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"asbyte[];

說明:

通常是建立一個ResourceManager的物件,第一個引數是資源的名字,這裡要注意的是“Resunce”是編譯的時候,元件(名稱空間)名字,“abc”是資原始檔的名字。如果前面不是通過VS的工程檔案進行編譯,而是通過控制檯方式直接編譯,那麼資源的名字不需要帶元件的名字,只是“abc”就可以了。原因嗎,我估計可能是vs在進行編譯的時候,帶了某些引數(確定了元件名),所以在專案讀取資原始檔的時候需要帶元件名。