什么是獨(dú)立存儲(chǔ)
獨(dú)立存儲(chǔ)(isolatedstorage)這個(gè)東西 是首先在SilverLight使用的(好 吧我是因?yàn)閣p才認(rèn)識(shí)獨(dú)立存儲(chǔ)的)
要說明什么是獨(dú)立存儲(chǔ) 首先就說什么是獨(dú)立(isolated) 獨(dú)立就是自個(gè)為一體
獨(dú)立存儲(chǔ)就是 A程序存的東西只能A用 B不能用 相同道理B的東西只能B自 己用A不能訪問
這樣做的很大好處是能提升安全性 哪怕你自個(gè)下載個(gè)病毒那病毒也只能在自個(gè) 的獨(dú)立存儲(chǔ)空間內(nèi)才能形成破壞
由于wp的獨(dú)立存儲(chǔ)其實(shí)是“共享存儲(chǔ)”(大家的獨(dú)立存儲(chǔ)空間 其實(shí)都是共享手機(jī)的那塊內(nèi)存 所謂獨(dú)立只是邏輯上的文件形式獨(dú)立而不是空間的獨(dú)立)
所以wp 手機(jī)就算中毒最壞的情況也只是手機(jī)空間被撐暴而已(自個(gè)理解 歡迎拍磚)
獨(dú)立存儲(chǔ)分2種形 式:
1.文件形式的存儲(chǔ),通過真實(shí)的文件和目錄的形式來創(chuàng)建和管理數(shù)據(jù)
2.設(shè)置的形式 ,通過字典的方式創(chuàng)建鍵值對(duì),可用于保存少量的數(shù)據(jù)(對(duì)于實(shí)現(xiàn)墓碑機(jī)制和諸如軟件的設(shè)置一類的話 這貨挺有用的)
首先說明下獨(dú)立存儲(chǔ)(IsolatedStorage)是位于 System.IO.IsolatedStorage
當(dāng)輸入IsoLatedStorage的時(shí)候智能提示會(huì)有4個(gè)跟獨(dú)立存儲(chǔ)有關(guān)的 。。。這個(gè)應(yīng)該叫選項(xiàng)還是選擇呢?
其中第一個(gè)IsolatedStorageException是獨(dú)立存儲(chǔ)的異常錯(cuò)誤
第二個(gè)就是用來創(chuàng)建和 管理文件的
第三個(gè)則主要是用于讀取,將獨(dú)立存儲(chǔ)里存儲(chǔ)的文件已流的形式讀取出來(此類繼 承自FileStream,大部分情況下適用與FileStream的都可以兼容這貨)
第四個(gè)則是以設(shè)置的形 式獲得獨(dú)立存儲(chǔ)區(qū)。。(就像剛才說的獨(dú)立存儲(chǔ)的2種形式的第二種)
異常沒什么好說的 重點(diǎn) 說第二跟第四個(gè) 也就是IsolatedStorageFile 和 IsolatedStorageSettings
IsolatedStorageFile
?
先說如何在獨(dú)立存儲(chǔ)里創(chuàng)建一個(gè)名叫 hello.txt且里面寫著hello的文本文檔。。
要在獨(dú)立存儲(chǔ)區(qū)里新建一個(gè)文件 首先要先獲得該軟 件(一說用戶)所擁有的獨(dú)立存儲(chǔ)區(qū)
var appStorage = IsolatedStorageFile.GetUserStoreForApplication();
(。。。第一次寫帶代碼的博客 不會(huì) 高亮顯示關(guān)鍵字。。。如何弄呢? HTML代碼看著蛋疼啊。。。)
然后創(chuàng)建該文件
var fileName = appStorage.OpenFile(“hello.txt”,FileMode.OpenOrCreate)
對(duì)于這句代碼可能 會(huì)有疑問,不是說好的創(chuàng)建嗎? 怎么是OpenFIle的?而且appStorage里也有個(gè)CreateFile的方法啊
說到這個(gè)請(qǐng)注意代碼的后半段,F(xiàn)ileMode.OpenOrCreate ?雖說我是用了 OpenFile這個(gè)沒錯(cuò),不過有FileMode在。。。
OpenOrCreate意味著如果文件當(dāng)前存在,則讀取 文件,假如不存在,就新建一個(gè),不過這是在你可能擁有文件的前提下才用OpenFile會(huì)比較科學(xué),如果 死都要?jiǎng)?chuàng)建新文件的話
如果直接用CreateFIle的話,假如當(dāng)前獨(dú)立存儲(chǔ)區(qū)已經(jīng)有了該文件會(huì)報(bào) Exception的
科學(xué)的做法是要先確定文件是否存在,如果存在則刪除在創(chuàng)建(懶了。。直接貼我 自己寫的代碼的圖吧)
好了 現(xiàn)在已經(jīng)有了那個(gè)文件了 如何向里面寫入數(shù)據(jù)呢 這個(gè)的話個(gè)正常 的其他c#的io操作差不多,直接用StreamWriter就ok了
StreamWriter sw = new StreamWriter (fileName);
sw.WriteLine("hello");
自此就已經(jīng)完成任務(wù)啦,在獨(dú)立存儲(chǔ) 區(qū)里創(chuàng)建了一個(gè)叫 hello.txt的文件且里面寫有hello
另外稍微注意的是獨(dú)立存儲(chǔ)是屬于非托管 資源 所以其需要手動(dòng)釋放(想問為什么??跟Stream為什么需要手動(dòng)釋放同道理,非托管的不被CLR管 理)
典型的辦法最好是新建獨(dú)立存儲(chǔ)的時(shí)候用一個(gè)using語句圍起來 這樣可以避免忘記 Dispose
另外可能有人問 我存進(jìn)去了那怎么讀出來呢?基本步驟差不多(我都用了OpenFile了 ,其實(shí)就是為了方便,讀寫一體化)
然后StreamWriter換成StreamReader讀出里面的流即可
IsolaterStorageSettings
這個(gè)東西會(huì)在獨(dú)立存儲(chǔ)區(qū)內(nèi)以字典的形式保存數(shù)據(jù)
感 覺好像是存在一個(gè)叫 __ApplicationSettings 的文件里(不知道正確與否 但是用上了Settings的話好 像就鐵定會(huì)多出這個(gè)文件)
也通過例子來說話
這次的目標(biāo)是在獨(dú)立存儲(chǔ)區(qū)保存一個(gè)鍵為 "hello”值為"everyone”
首先也要跟File那個(gè)差不多獲取當(dāng)前軟件內(nèi)所擁有的獨(dú)立 存儲(chǔ)區(qū) 不過這次獲得的是Settings而不是File了(畢竟我們是要保存到Settings而不是以真實(shí)文件形 式保存)
IsolatedStorageSettings setting = IsolatedStorageSettings.ApplicationSettings;
獲取之后其實(shí)就可以很簡單的
setting[“鍵的名稱"]=值
新聞熱點(diǎn)
疑難解答