?? 深入剖析asp.net資源文件 .txt
字號:
深入剖析Asp.net資源文件
一、資源文件的定義
簡單點的說法就是程序中可以使用的數據,象:字符串,圖片或二進制數據等等,實際上可以包含任何類型的文件。
資源文件可以有多個語言版本,這樣在開發全球化應用程序時就很重要。這個特性是通過System.Resources空間下的ResourceManager類來完成需要在什么時候調用那個版本的。在VS.NET中將一個文件的屬性設置為Embedded Resource就可以使資源被嵌入到Assembly中了。
二、資源文件包含那些類型?
System.Resources 空間支持三種資源文件:。txt 文件,只能有字符串資源。因為不能被嵌入到 Assembly 中,所以很容易暴露,被客戶修改。最大缺點是僅支持字符串資源,所以不推薦使用。resx 文件,由 XML 組成,可以加入任何資源,包括二進制。同樣不能被嵌入到Assembly 中。在 System.Resources 名字空間中有專用讀寫的類。VS.NET 創建這種文件然后將其轉成 .resources 文件并根據設置將其嵌入到 Assembly 中。。resources 文件,PE格式,可以加入任何資源。唯一可以被嵌入到 Assembly 的文件,在 System.Resources 名字空間中有專用讀寫的類。
三、怎么調用資源文件?
通常的做法是要將。txt 文件。resx 文件等轉化成。resources 文件在通過ResourceManager來進行調用,但是我們也可以不采用那種方式,我覺得比較麻煩,象下面這樣做我覺得好些:我們可以不通過一個資源文件而直接將一資源嵌入到 Assembly 中。這可以在 VS.NET 中通過設置一文件的 Build 屬性為 Embedded Resource 實現。在這種情況下 ResourceManager 就沒有用了,因為它只能獲取 .resources 資源文件。那么怎么調用這類的資源呢?我們需要利用一些 Reflection 中的特征。我們只要了解一些 System.Reflection.Assembly 這個類中的一些函數就可以了。有三個相關函數,不過我們只需要 Assembly.GetManifestResourceStream 這個函數。這個函數將一嵌入到Assembly 中的資源以 stream 的方式返回,而我們可以將這個 stream 轉成在 .NET 中可用的對象。比如,如果嵌入資源是一圖片,那么我們可以利用 New Bitmap(Stream) 這個 Bitmap 的 constructor 獲得這個圖片資源的 Bitmap 對象;如果我們嵌入的是一文本文件,我們可以使用StreamReader將它的內容讀出來。
下面給一個簡單的以文本文件為資源的DEMO
step1: 資源文件
將文件嵌入Assembly,上面已說了怎么做
step2: 調用資源文件
public Stream GetEmbeddedResource()
{
return System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("ResoureceDemo.test.txt") ;//關鍵的一句
}//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;
}
當然,以圖片格式的方式也一樣的操作。不在舉例了,最后有個工具大家不要忘了:resgen.exe 專門用來做資源文件類型之間的轉換。支持 .txt <-> .resx <-> .resources 之間的轉換。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -