教你如何在VB.NET可執(zhí)行文件中嵌入一個(gè)文本文件
經(jīng)過長時(shí)間學(xué)習(xí)VB.NET,于是和大家分享一下,看完本文你肯定有不少收獲,希望本文能教會(huì)你更多東西。以前我做程序,版權(quán)使用協(xié)議信息總是放在一個(gè)txt文本文件中,打包時(shí)和可執(zhí)行文件放在一起,在安裝時(shí)釋放到程序的安裝路徑,然后再打開使用。這種做法有兩大壞處,一是這個(gè)文件很容易被其它人修改,二是話這種做法太不成熟了。現(xiàn)在我使用一個(gè)新的方法,就是將協(xié)議和可執(zhí)行文件結(jié)合在一起,在程序運(yùn)行時(shí)讀出使用,當(dāng)然這就全靠資源的作用了。
示例 在net中可執(zhí)行文件中嵌入一個(gè)文本文件步驟如下:
1、在VB.net中新建一個(gè)項(xiàng)目,類型選擇windows應(yīng)用程序,項(xiàng)目名稱改為resourcesample2。
2、點(diǎn)擊項(xiàng)目菜單,選擇添加現(xiàn)有項(xiàng),接著會(huì)彈出一個(gè)文件對(duì)話框,將文件類型改為所有文件后,選擇要嵌入的txt文件(其實(shí)這時(shí)你可選擇任意文件,只要你喜歡*-)。接著你會(huì)在解決方案資源管理器中發(fā)現(xiàn)你新加入的文件名。如圖:
3、關(guān)鍵的一步到了,在解決方案資源管理器中點(diǎn)擊你剛加入的文件名,然后在屬性窗體中將 "加成操作" 這一屬性改為"嵌入的資源",這將告訴net,剛加入的文件將會(huì)作為資源鏈接進(jìn)VB.NET可執(zhí)行文件中。留意一下文件名哦,這在后面的程序中也很重要,強(qiáng)烈建議使用小寫文件名!如下圖:
4、接下就是在程序中用代碼讀出這個(gè)文件的內(nèi)容。
在Form1_Click事件中加入代碼,如下所示:
- Private Sub Form1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Click
- Dim tobjStream As IO.Stream = Me.GetType.Assembly.GetManifestResourceStream("resourcesample2.License.txt")
- Dim tobjStreamReader As New IO.StreamReader(tobjStream, System.Text.Encoding.Default)
- Dim tstrLicense As String = tobjStreamReader.ReadToEnd
- '如果是圖象就可以使用dim tobjBMP as new bmp(tobjstrem)的方法直接得到資源內(nèi)容
- MessageBox.Show(tstrLicense)'顯示剛才讀得的結(jié)果
- End Sub
在此對(duì)上述代碼進(jìn)行一點(diǎn)解釋,net是通過Assembly的GetManifestResourceStream讀出嵌入在VB.NET可執(zhí)行文件的資源并以IO.Stream對(duì)象返回(反正得到了這個(gè)流,就好象你時(shí)進(jìn)行文件流操作,讀/寫到磁盤或象我一樣在程序內(nèi)部處理都由你自己決定了)。這個(gè)方法的唯一參數(shù)是資源的唯一標(biāo)識(shí),是按如下方式組成的:程序集的根命名空間+"."+資源在屬性窗口顯示的文件名(這是區(qū)分大小寫的,在上文已提醒你注意了哦,而且這個(gè)標(biāo)識(shí)法在C#中是不同的,別問我為什么,誰叫你不和我一樣使用VB.net,哼8-)。
程序集的根命空間的名你可以從項(xiàng)目菜單下的XXXX(XXXX是你的項(xiàng)目名稱,可不要認(rèn)為是罵人的話8-)屬性中看到:
其余的代碼就是以流方式讀文件了,很簡單吧。
5、按生成菜單下的生成解決方案,然后到你可執(zhí)文件的目錄下看看,你會(huì)發(fā)現(xiàn)除了可執(zhí)行文件外沒有別的文本文件,因?yàn)槲谋疚募岩再Y源的方式存在于VB.NET可執(zhí)行文件中啦。運(yùn)行一下看看效果?。ㄒ恍┫胱龊诳偷牟锁B又有什么怪怪的想法,藏木馬?……)
資源的使用就介紹到此為至吧,窗外依然小雨菲菲,在虛幻的網(wǎng)絡(luò)和殘酷的現(xiàn)實(shí)邊緣排徊久了,寫文章都有點(diǎn)怪怪的,請(qǐng)大伙兒原諒,祝大伙編程愉快。
【編輯推薦】