一資源文件的定義
簡單點的說法就是程序中可以使用的數據象字符串圖片或二進制數據等等實際上可以包含任何類型的文件
資源文件可以有多個語言版本這樣在開發全球化應用程序時就很重要這個特性是通過SystemResources空間下的ResourceManager類來完成需要在什麼時候調用那個版本的在VSNET中將一個文件的屬性設置為Embedded Resource就可以使資源被嵌入到Assembly中了
二資源文件包含那些類型?
SystemResources 空間支持三種資源文件txt 文件只能有字符串資源因為不能被嵌入到 Assembly 中所以很容易暴露被客戶修改最大缺點是僅支持字符串資源所以不推薦使用resx 文件由 XML 組成可以加入任何資源包括二進制同樣不能被嵌入到Assembly 中在 SystemResources 名字空間中有專用讀寫的類VSNET 創建這種文件然後將其轉成 resources 文件並根據設置將其嵌入到 Assembly 中resources 文件PE格式可以加入任何資源唯一可以被嵌入到 Assembly 的文件在 SystemResources 名字空間中有專用讀寫的類
三怎麼調用資源文件?
通常的做法是要將txt 文件resx 文件等轉化成resources 文件在通過ResourceManager來進行調用但是我們也可以不采用那種方式我覺得比較麻煩象下面這樣做我覺得好些我們可以不通過一個資源文件而直接將一資源嵌入到 Assembly 中這可以在 VSNET 中通過設置一文件的 Build 屬性為 Embedded Resource 實現在這種情況下 ResourceManager 就沒有用了因為它只能獲取 resources 資源文件那麼怎麼調用這類的資源呢?我們需要利用一些 Reflection 中的特征我們只要了解一些 SystemReflectionAssembly 這個類中的一些函數就可以了有三個相關函數不過我們只需要 AssemblyGetManifestResourceStream 這個函數這個函數將一嵌入到Assembly 中的資源以 stream 的方式返回而我們可以將這個 stream 轉成在 NET 中可用的對象比如如果嵌入資源是一圖片那麼我們可以利用 New Bitmap(Stream) 這個 Bitmap 的 constructor 獲得這個圖片資源的 Bitmap 對象如果我們嵌入的是一文本文件我們可以使用StreamReader將它的內容讀出來
下面給一個簡單的以文本文件為資源的DEMO
step: 資源文件
將文件嵌入Assembly上面已說了怎麼做
step: 調用資源文件
public Stream GetEmbeddedResource()
{
return SystemReflectionAssemblyGetExecutingAssembly()GetManifestResourceStream(ResoureceDemotesttxt) ;//關鍵的一句
}//ResoureceDemotesttxt解釋一哈
//ResoureceDemo表示命名空間testtxt文本文件名稱
private void button_Click(object sender SystemEventArgs e)
{
Stream sResponse;
StreamReader srResponse;
sResponse=GetEmbeddedResource();
srResponse=new StreamReader(sResponse);
string txtDemo=srResponseReadToEnd()ToString();
labelText =txtDemo;
}
當然以圖片格式的方式也一樣的操作不在舉例了最後有個工具大家不要忘了resgenexe 專門用來做資源文件類型之間的轉換支持 txt <> resx <> resources 之間的轉換
From:http://tw.wingwit.com/Article/program/net/201311/12543.html