C#讀取資源文件(DLL/EXE/MDB)的兩種方法及保存資源文件到本地
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
方法1 GetManifestResourceStreamVB.NET中資源的名稱為:項(xiàng)目默認(rèn)命名空間.資源文件名 C#中則是:項(xiàng)目命名空間.資源文件所在文件夾名.資源文件名 讀取資源文件 Assembly assm = Assembly.GetExecutingAssembly(); Stream istr = assm.GetManifestResourceStream("CreateDatabase.Resources.aa.txt"); sr = new System.IO.StreamReader(istr); string str = sr.ReadLine(); 方法2 ResourceManager.GetObject("文件名")讀取資源文件 Assembly myAssem = Assembly.GetEntryAssembly();
ResourceManager rm = new ResourceManager("CreateDatabase.Properties.Resources", myAssem);
//CreateDatabase是你程序的命名空間,CreateDatabase.Properties 是資源類Resources的命名空間
// this.pictureBox1.Image = (Image)rm.GetObject("aa");
string str = rm.GetString("aa"); //資源文件名稱不帶擴(kuò)展名 CreateDatabase.Properties 是資源類Resources的命名空間 , 資源文件名稱不帶擴(kuò)展名 二、C#嵌入dll到資源釋放的問(wèn)題有些程序運(yùn)行的時(shí)候,可能調(diào)用外部的dll,用戶使用時(shí)可能會(huì)不小心丟失這些dll,導(dǎo)致程序無(wú)法正常運(yùn)行,因此可以考慮將這些dll嵌入到資源中,啟動(dòng)時(shí)自動(dòng)釋放。對(duì)于托管的dll,我們可以用打包軟件合成一個(gè)exe(例如利用Imerge),但是對(duì)于一些用C++等寫(xiě)的非托管dll,就比較麻煩。在這種情況下,大家可以考慮本文介紹的方法。 1、將需要用到的dll文件嵌入資源文件中。 (1)將需要用到的dll文件拷貝到工程中
(2)修改“生成操作”為“嵌入的資源” 這樣就完成了dll文件嵌入資源的過(guò)程。 2、編寫(xiě)自動(dòng)釋放的過(guò)程 (保存資源文件到本地) (1) void ReleaseDLL() { byte[] byDll = global::命名空間.Properties.Resources.test;//獲取嵌入dll文件的字節(jié)數(shù)組 string strPath = Application.StartupPath + @"\test.dll";//設(shè)置釋放路徑 導(dǎo)出路徑 //創(chuàng)建dll文件(覆蓋模式) using (FileStream fs = new FileStream(strPath, FileMode.Create)) { fs.Write(byDll, 0, byDll.Length); } } (注意:一定要設(shè)置 嵌入的資源) 在程序啟動(dòng)時(shí),首先調(diào)用上面的函數(shù)完成dll文件的釋放,然后程序就能夠正常運(yùn)行了。這種做法只是筆者在實(shí)際項(xiàng)目中有時(shí)采用的一種方式,相信對(duì)大家也有一定的參考價(jià)值。
(2)、 我使用這種方式也可以導(dǎo)出,但是導(dǎo)出的文件大小不對(duì),文件損壞了,使用不了 System.Resources.ResourceManager rm = Properties.Resources.ResourceManager;
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bin = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
using (FileStream Stream = new FileStream("導(dǎo)出目錄" + "\\test.dll", FileMode.Create)) 該文章在 2021/1/30 10:10:36 編輯過(guò) |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |