當應用程序在文件中存儲數據時,必須仔細選擇文件名和存儲位置,最大程度地減少其餘應用程序知道該存儲位置的可能性,從而使數據不易受到損壞。 若是沒有標準的系統來處理這些問題,想開發出最大程度地減小存儲衝突的特別技術可能並不是易事,並且開發出來的技術也不見得可靠。git
經過使用獨立存儲,數據將始終按用戶和程序集進行隔離。 程序集的源或強名稱等憑據肯定程序集的身份。 經過使用相似的憑據,數據還能夠按應用程序域進行隔離。shell
當使用獨立存儲時,應用程序將數據保存到一個與代碼標識的某些方面(例如發行者或簽名)相關聯的獨特數據隔離艙。 數據隔離艙是一個抽象的存儲位置,而不是具體的存儲位置,它由一個或多個獨立的存儲文件(叫作存儲區)組成,這些獨立的存儲文件包含存儲數據的實際目錄位置。 例如,應用程序可能有一個與其關聯的數據隔離艙,文件系統中的某個目錄將實現實際保留應用程序數據的存儲區。 保存在存儲區中的數據能夠是任意類型的數據,不管是用戶首選項信息仍是應用程序狀態均可以。 對於開發人員,數據隔離艙的位置是透明的;存儲區一般駐留在客戶端,但服務器應用程序能夠經過模擬它所服務的用戶來使用獨立存儲區存儲信息。 獨立存儲還能夠將信息和用戶漫遊配置文件一塊兒存儲在服務器上,這樣,漫遊用戶就能夠隨時使用該信息。數據庫
安全訪問
經過使用獨立存儲,可使部分受信任的應用程序以由計算機安全策略控制的方式存儲數據。 對於用戶需慎重運行的下載的組件來講,這尤其有用。 安全策略不多向這種代碼授予使用標準 I/O 機制訪問文件系統的權限, 可是默認狀況下,會對在本地計算機、本地網絡或 Internet 中運行的代碼授予使用獨立存儲的權限。編程
管理員能夠根據適當的信任級別限制應用程序或用戶可使用多少獨立存儲。 另外,管理員能夠徹底移除用戶的持久性數據。 若要建立或訪問獨立存儲,則必須授予代碼相應的 IsolatedStorageFilePermission。數組
要訪問獨立存儲,代碼必須具備全部必要的本機平臺操做系統權限。 例如,在 Windows 2000 上必須知足訪問控制列表 (ACL),該列表控制哪些用戶具備使用文件系統的權限。 除非執行(特定於平臺的)模擬,不然 .NET Framework 應用程序已經具備訪問獨立存儲的操做系統權限。 在這種狀況下,應用程序負責確保被模擬的用戶標識具備訪問獨立存儲的適當操做系統權限。 對於在 Web 上運行或從 Web 下載的代碼而言,這種訪問爲之提供了一種讀寫與特定用戶相關的存儲區域的簡便方法。promise
獨立存儲位置
有時候,使用操做系統的文件系統來驗證對獨立存儲進行的更改會很是有幫助。 開發人員可能還須要瞭解獨立存儲文件的位置。 該位置隨操做系統的不一樣而不一樣。 下表顯示了在幾個常見操做系統上建立獨立存儲的根位置。 在此根位置下查找 Microsoft\IsolatedStorage 目錄。 您必須更改文件夾設置以顯示隱藏文件和文件夾,才能查看到文件系統中的獨立存儲。安全
操做系統服務器 |
在文件系統中的位置網絡 |
---|---|
Windows 9八、Windows Me - 未啓用用戶配置文件 |
支持漫遊的存儲區 = <SYSTEMROOT>\Application Data 非漫遊存儲區 = WINDOWS\Local Settings\Application Data |
Windows 9八、Windows Me - 啓用了用戶配置文件 |
支持漫遊的存儲區 = <SYSTEMROOT>\Profiles\<用戶>\Application Data 非漫遊存儲區 = Windows\Local Settings\Application Data |
Windows NT 4.0 |
<SYSTEMROOT>\Profiles\<用戶>\Application Data |
Windows NT 4.0 - Service Pack 4 |
支持漫遊的存儲區 = <SYSTEMROOT>\Profiles\<用戶>\Application Data 非漫遊存儲區 = <SYSTEMROOT>\Profiles\<用戶>\Local Settings\Application Data |
Windows 2000、Windows XP、Windows Server 2003 - 從 Windows NT 4.0 升級 |
支持漫遊的存儲區 = <SYSTEMROOT>\Profiles\<用戶>\Application Data 非漫遊存儲區 = <SYSTEMROOT>\Profiles\<用戶>\Local Settings\Application Data |
Windows 2000 - 全新安裝(和從 Windows 98 及 Windows NT 3.51 升級) |
支持漫遊的存儲區 = <SYSTEMDRIVE>\Documents and Settings\<用戶>\Application Data 非漫遊存儲區 = <SYSTEMDRIVE>\Documents and Settings\<用戶>\Local Settings\Application Data |
Windows XP、Windows Server 2003 - 全新安裝(和從 Windows 2000 及 Windows 98 升級) |
支持漫遊的存儲區 = <SYSTEMDRIVE>\Documents and Settings\<用戶>\Application Data 非漫遊存儲區 = <SYSTEMDRIVE>\Documents and Settings\<用戶>\Local Settings\Application Data |
Windows Vista |
支持漫遊的存儲區 = <SYSTEMDRIVE>\Users\<用戶>\AppData\Roaming 非漫遊存儲區 = <SYSTEMDRIVE>\Users\<用戶>\AppData\Local |
建立、枚舉和刪除獨立存儲
提供了三個主要的類來幫助您執行涉及獨立存儲的任務:
-
從 IsolatedStorage 派生的 IsolatedStorageFile 提供對存儲的程序集和應用程序文件的基本管理。 IsolatedStorageFile 類的實例表示位於文件系統中的單個存儲區。
-
從 System.IO.FileStream 派生的 IsolatedStorageFileStream 提供對存儲區中文件的訪問。
-
IsolatedStorageScope 是一個枚舉,使您能夠建立並選擇具備適當隔離類型的存儲區。
獨立存儲類使您能夠建立、枚舉並刪除獨立存儲。 經過 IsolatedStorageFile 對象可使用執行這些任務的方法。 某些操做要求您具備 IsolatedStorageFilePermission(它表示管理獨立存儲的權限);您可能還須要具備訪問文件或目錄的操做系統權限。 在 Microsoft Windows NT、Microsoft Windows 2000、Windows XP 和 Windows Vista 上,文件上的訪問控制列表 (ACL) 設置能夠防止您訪問獨立存儲。 獨立存儲工具 Storeadm.exe 也能夠用於簡單的存儲區管理,例如列出或刪除當前用戶的全部存儲區。
有關演示常見的獨立存儲任務的一系列示例,請參見相關主題中列出的幫助主題。 每一個示例都有一個源文件,用以闡釋一項特定任務。 每一個示例的主頁上都包含有安裝、編譯和運行的指導說明。 這些示例僅以 C# 的形式提供。
獨立存儲的狀況
獨立存儲可用於許多狀況。 如下介紹了五種最典型的狀況:
-
下載的控件。 不容許從 Internet 下載的託管代碼控件經過正常的 I/O 類寫入硬盤,但它們可使用獨立存儲來持久保存用戶設置和應用程序狀態。
-
共享組件存儲。 應用程序間共享的組件可使用獨立存儲來提供對數據存儲區的有控制的訪問。
-
服務器存儲。 服務器應用程序可使用獨立存儲爲請求應用程序的大量用戶提供單獨的存儲區。 由於獨立存儲始終按用戶進行隔離,因此服務器必須模擬發出請求的用戶。 在這種狀況下,根據主體的標識隔離數據,該標識與應用程序用來區分其用戶的標識是同一個標識。
-
漫遊。 應用程序還能夠將獨立存儲和漫遊用戶配置文件一塊兒使用。 這容許用戶的獨立存儲區和配置文件一塊兒漫遊。
雖然獨立存儲很是適合於以上所述的狀況,但在少數狀況下,您「不」應該使用獨立存儲:
-
不要使用獨立存儲來存儲重要機密(例如不加密的密鑰或密碼),由於獨立存儲對高度受信任的代碼、非託管代碼或計算機的受信任用戶不設防。
-
不要使用獨立存儲來存儲代碼。
-
不要使用獨立存儲來存儲配置和部署設置,它們是由管理員來控制的。 (由於管理員不控制用戶首選項,因此用戶首選項不被認爲是配置設置。)
當今的許多應用程序都使用數據庫來存儲和隔離數據,在這種狀況下,數據庫中的一個或多個行可能表明某個特定用戶的存儲。 當用戶數較少時、當使用數據庫的系統開銷很是大時或當不存在數據庫功能時,您能夠選擇使用獨立存儲而不使用數據庫。 另外,當應用程序要求比數據庫的行所提供的存儲更加靈活和複雜的存儲時,獨立存儲也能夠提供一個可行的替代方案。