C#中從資源檔裡負載檔案

來源:互聯網
上載者:User
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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.