獨立存儲(Isolated Storage)是Silverlight 2中提供的一個用戶端安全的存儲,它是一個與Cookie機制類似的局部信任機制。獨立存儲機制的APIs 提供了一個虛拟的檔案系統和可以通路這個虛拟檔案系統的資料流對象。Silverlight中的獨立存儲是基于 .NET Framework中的獨立存儲來建立的,是以它僅僅是.NET Framework中獨立存儲的一個子集。
Silverlight中的獨立存儲有以下一些特征:
1.每個基于Silverlight的應用程式都被配置設定了屬于它自己的一部分存儲空間, 但是應用程式中的程式集卻是在存儲空間中共享的。一個應用程式被伺服器賦給了一個唯一的固定的辨別值。基于Silverlight的應用程式的虛拟檔案系統現在就以一個辨別值的方式來通路了。這個辨別值必須是一個常量,這樣每次應用程式運作時才可以找到這個共享的位置。
2.獨立存儲的APIs 其實和其它的檔案操作APIs類似,比如 File 和 Directory 這些用來通路和維護檔案或檔案夾的類。 它們都是基于FileStream APIs 來維護檔案的内容的。
3.獨立存儲嚴格的限制了應用程式可以存儲的資料的大小,目前的上限是每個應用程式為1 MB。
Silverlight中的獨立存儲功能通過密封類IsolatedStorageFile來提供,位于命名空間System.IO.IsolatedStorag中,IsolatedStorageFile類抽象了獨立存儲的虛拟檔案系統。建立一個 IsolatedStorageFile 類的執行個體,可以使用它對檔案或檔案夾進行列舉或管理。同樣還可以使用該類的 IsolatedStorageFileStream 對象來管理檔案内容,它的定義大概如下所示:

在Silverlight 2中支援兩種方式的獨立存儲,即按應用程式存儲或者按站點存儲,可以分别使用GetUserStoreForApplication方法和GetUserStoreForSite方法來擷取IsolatedStorageFile對象。下面看一個簡單的示例,最終的效果如下圖所示:
下面來看各個功能的實作:
建立目錄,直接使用CreateDirectory方法就可以了,另外還可以使用DirectoryExistes方法來判斷目錄是否已經存在:
<a href="http://11011.net/software/vspaste"></a>
建立檔案,通過CreateFile方法來擷取一個IsolatedStorageFileStream,并将内容寫入到檔案中:
讀取檔案,直接使用System.IO命名空間下的StreamReader:
删除目錄和檔案:
擷取目錄清單和檔案清單:
在本文一開始我就提到獨立存儲嚴格的限制了應用程式可以存儲的資料的大小,但是我們可以通過IsolatedStorageFile類提供的IncreaseQuotaTo方法來申請更大的存儲空間,空間的大小是用位元組作為機關來表示的,如下代碼片段所示,申請獨立存儲空間增加到5M:
既然獨立獨立存儲是存放在用戶端本地,那到底存放在何處呢?在我個人計算機上的位址為:C:\Users\TerryLee\AppData\LocalLow\Microsoft\Silverlight\is\035kq51b.2q4\pksdhgue.3rx\1,不同機器會有一些變化,另外在XP下的存儲位置與Vista是不相同的。在g檔案夾下面,我們找到目前應用程式的一些公有資訊,可以看到有如下三個檔案:
id.dat記錄了目前應用程式的ID
quota.dat記錄了目前應用程式獨立存儲的配額,即存儲空間大小
used.dat記錄已經使用的空間
在另一個s檔案夾下可以找到我們建立的目錄以及檔案,并且可以打開檔案來看到存儲的内容,如下圖所示:
現在我們來思考一個問題,既然獨立存儲是一個與Cookie機制類似的局部信任機制,我們是否也可以禁用獨立存儲呢?答案自然是肯定的。在Silverlight應用程式上點選右鍵時,選擇Silverlight Configuration菜單,将會看到如下視窗:
在這裡我們可以看到每一個應用程式存儲空間的大小以及目前使用的空間;可以删除應用程式獨立存儲資料或者禁用獨立存儲的功能。
最後在簡單說一下獨立存儲配置,在Beta 1時代是應用程式配置,現在不僅支援應用程式配置,同時還支援站點配置,我們可以用它來存儲應用程式配置如每個頁面顯示的圖檔數量,頁面布局自定義配置等等,使用IsolatedStorageSettings類來實作,該類在設計時使用了字典來存儲名-值對,它的使用相當簡單:
獨立存儲配置的機制與我們上面講的一樣,它也是基于本地檔案存儲,系統預設的會建立一個名為__LocalSettings的檔案進行存儲,如下圖所示:
打開檔案後可以看到,存儲的内容(此處進行了整理)
值得一提的是使用獨立存儲配置不僅僅可以存儲簡單類型的資料,也可以存儲我們自定義類型的資料。
本文詳細介紹了Silverlight 2中的獨立存儲機制,希望對大家有所幫助。
示例下載下傳:
本文轉自lihuijun51CTO部落格,原文連結: http://blog.51cto.com/terrylee/84585,如需轉載請自行聯系原作者