一、資源文件的定義
簡單點(diǎn)的說法就是程序中可以使用的數(shù)據(jù),象:字符串,圖片或二進(jìn)制數(shù)據(jù)等等,實(shí)際上可以包含任何類型的文件。
資源文件可以有多個(gè)語言版本,這樣在開發(fā)全球化應(yīng)用程序時(shí)就很重要。這個(gè)特性是通過system.resources空間下的resourcemanager類來完成需要在什么時(shí)候調(diào)用那個(gè)版本的。在vs.net中將一個(gè)文件的屬性設(shè)置為embedded resource就可以使資源被嵌入到assembly中了。
二、資源文件包含那些類型?
system.resources 空間支持三種資源文件:。txt 文件,只能有字符串資源。因?yàn)椴荒鼙磺度氲?assembly 中,所以很容易暴露,被客戶修改。最大缺點(diǎn)是僅支持字符串資源,所以不推薦使用。resx 文件,由 xml 組成,可以加入任何資源,包括二進(jìn)制。同樣不能被嵌入到assembly 中。在 system.resources 名字空間中有專用讀寫的類。vs.net 創(chuàng)建這種文件然后將其轉(zhuǎn)成 .resources 文件并根據(jù)設(shè)置將其嵌入到 assembly 中。。resources 文件,pe格式,可以加入任何資源。唯一可以被嵌入到 assembly 的文件,在 system.resources 名字空間中有專用讀寫的類。
三、怎么調(diào)用資源文件?
通常的做法是要將。txt 文件。resx 文件等轉(zhuǎn)化成。resources 文件在通過resourcemanager來進(jìn)行調(diào)用,但是我們也可以不采用那種方式,我覺得比較麻煩,象下面這樣做我覺得好些:我們可以不通過一個(gè)資源文件而直接將一資源嵌入到 assembly 中。這可以在 vs.net 中通過設(shè)置一文件的 build 屬性為 embedded resource 實(shí)現(xiàn)。在這種情況下 resourcemanager 就沒有用了,因?yàn)樗荒塬@取 .resources 資源文件。那么怎么調(diào)用這類的資源呢?我們需要利用一些 reflection 中的特征。我們只要了解一些 system.reflection.assembly 這個(gè)類中的一些函數(shù)就可以了。有三個(gè)相關(guān)函數(shù),不過我們只需要 assembly.getmanifestresourcestream 這個(gè)函數(shù)。這個(gè)函數(shù)將一嵌入到assembly 中的資源以 stream 的方式返回,而我們可以將這個(gè) stream 轉(zhuǎn)成在 .net 中可用的對(duì)象。比如,如果嵌入資源是一圖片,那么我們可以利用 new bitmap(stream) 這個(gè) bitmap 的 constructor 獲得這個(gè)圖片資源的 bitmap 對(duì)象;如果我們嵌入的是一文本文件,我們可以使用streamreader將它的內(nèi)容讀出來。
下面給一個(gè)簡單的以文本文件為資源的demo
step1: 資源文件
將文件嵌入assembly,上面已說了怎么做
step2: 調(diào)用資源文件
public stream getembeddedresource()
{
return system.reflection.assembly.getexecutingassembly().getmanifestresourcestream("resourecedemo.test.txt") ;//關(guān)鍵的一句
}//resourecedemo.test.txt解釋一哈
//resourecedemo表示命名空間,test.txt文本文件名稱
private void button1_click(object sender, system.eventargs e)
{
stream sresponse;
streamreader srresponse;
sresponse=getembeddedresource();
srresponse=new streamreader(sresponse);
string txtdemo=srresponse.readtoend().tostring();
label1.text =txtdemo;
}
當(dāng)然,以圖片格式的方式也一樣的操作。不在舉例了,最后有個(gè)工具大家不要忘了:resgen.exe 專門用來做資源文件類型之間的轉(zhuǎn)換。支持 .txt <-> .resx <-> .resources 之間的轉(zhuǎn)換。
新聞熱點(diǎn)
疑難解答
圖片精選