自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Windows Phone 8中的隔離式存儲(chǔ)機(jī)制分析

譯文
移動(dòng)開發(fā)
隔離式存儲(chǔ)機(jī)制的作用在于為Windows Phone系統(tǒng)實(shí)現(xiàn)本地?cái)?shù)據(jù)存儲(chǔ)。之所以名為“隔離式”,是因?yàn)槠渌鼞?yīng)用程序?qū)o法訪問當(dāng)前特定數(shù)據(jù)。在今天的文章中,我們將一同對(duì)隔離式存儲(chǔ)的概念加以了解,并學(xué)習(xí)如何才能利用它以更為安全的方式在Winodws Phone 8當(dāng)中進(jìn)行數(shù)據(jù)存儲(chǔ)。

【51CTO譯文】隔離式存儲(chǔ)機(jī)制的作用在于為Windows Phone系統(tǒng)實(shí)現(xiàn)本地?cái)?shù)據(jù)存儲(chǔ)。之所以名為“隔離式”,是因?yàn)槠渌鼞?yīng)用程序?qū)o法訪問當(dāng)前特定數(shù)據(jù)。在今天的文章中,我們將一同對(duì)隔離式存儲(chǔ)的概念加以了解,并學(xué)習(xí)如何才能利用它以更為安全的方式在Winodws Phone 8當(dāng)中進(jìn)行數(shù)據(jù)存儲(chǔ)。

隔離式存儲(chǔ)所采用的移動(dòng)架構(gòu)與Windows平臺(tái)上基于Silverlight的應(yīng)用程序比較相似。全部I/O操作都被限定在隔離存儲(chǔ)范疇之內(nèi),而且無法直接訪問底層OS文件系統(tǒng)——這就預(yù)防了來自其它應(yīng)用程序的未驗(yàn)證訪問及數(shù)據(jù)損壞問題的發(fā)生,從而切實(shí)帶來安全性保障。如果大家希望在兩款應(yīng)用程序之間進(jìn)行數(shù)據(jù)共享,則需要某些支持?jǐn)?shù)據(jù)共享功能的云服務(wù)作為中轉(zhuǎn)平臺(tái)。

Here are a few things worth mentioning about isolated storage:本地文件夾也就是我們移動(dòng)設(shè)備當(dāng)中應(yīng)用程序數(shù)據(jù)存儲(chǔ)所使用的根文件夾。我們可以通過兩種方式實(shí)現(xiàn)本地?cái)?shù)據(jù)存儲(chǔ)。***種是通過名為IsolatedStorageSettings的名/值對(duì)集合。第二種方式則是利用IsolatedStorageFile創(chuàng)建實(shí)際文件及文件夾。下面來看隔離式存儲(chǔ)機(jī)制當(dāng)中需要高度關(guān)注的幾項(xiàng)重要內(nèi)容:

1. URI方案

在處理路徑中的本地文件夾時(shí),我們需要利用isostore或者ms-appdata URI方案名。這兩種URI方案名允許大家對(duì)本地文件夾進(jìn)行訪問,但卻無法以互換方式使用。ms-appdata的作用在于通過API處理本地文件夾root,而isostore則負(fù)責(zé)處理本地文件夾root。以下示例能夠很好地展示二者的區(qū)別。

  1. // Create a local database in the local folder with the isostore URI scheme. 
  2.  
  3. MyDataContext db = new MyDataContext("isostore:/mydb.sdf"); 
  4.  
  5. // Get a file from the local folder with the ms-appdata URI scheme. 
  6.  
  7. var file = await Windows.StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appdata:///local/AppConfigSettings.xml")); 

ms-appdata要求使用三個(gè)斜杠符號(hào)(///)而isostore則只需要使用一個(gè)斜杠符號(hào)(/)。兩種URI方案的路徑總長度都不能超過185個(gè)字符。

2. IsolatedStorageSettings

將數(shù)據(jù)添加到隔離式存儲(chǔ)中的最簡單方式在于利用IsolatedStorageSettings類,也就是通過Dictionary<TKey, TValue>格式將數(shù)據(jù)以鍵-值對(duì)的方式保存在隔離式存儲(chǔ)當(dāng)中。IsolatedStorageSettings通常被用于保存設(shè)置信息,例如每頁顯示的圖片數(shù)量以及頁面布局選項(xiàng)等等。保存在IsolatedStorageSettings當(dāng)中的數(shù)據(jù)會(huì)在應(yīng)用程序啟動(dòng)周期之內(nèi)持續(xù)可用。

如果大家只是希望將設(shè)置信息保存為Username = "Fred"這種形式,那么也可以在隔離式存儲(chǔ)當(dāng)中使用ApplicationSettings對(duì)象。其使用方式與處理目錄時(shí)完全相同。saveString方法則可被用于為鍵name保存一條字符串值message。

  1. void saveString(string message, string name) 
  2.     IsolatedStorageSettings.ApplicationSettings[name] = message; 
  3.  
  4.     IsolatedStorageSettings.ApplicationSettings.Save(); 

這種存儲(chǔ)方式與目錄基本類似,但在完成鍵添加之后不要忘記調(diào)用Save進(jìn)行保存。

為了從設(shè)置當(dāng)中進(jìn)行值檢索,大家可以使用loadString方法將已保存的設(shè)置鍵作為參數(shù)加以獲取、并在該鍵確實(shí)存在時(shí)返回與之對(duì)應(yīng)的值。

  1. string loadString(string name) 
  2.     if (IsolatedStorageSettings.ApplicationSettings.Contains(name)) 
  3.     { 
  4.     return (string)IsolatedStorageSettings.ApplicationSettings[name]; 
  5.     } 
  6.     else 
  7.     { 
  8.     return null
  9. }

在實(shí)際進(jìn)行查找之前,請(qǐng)先行確認(rèn)該鍵是否存在。如果大家嘗試從某個(gè)根本不存在的鍵中獲取與之對(duì)應(yīng)的值,則會(huì)出現(xiàn)異常狀況。

***實(shí)踐方式之一在于創(chuàng)建一個(gè)特殊的靜態(tài)類,其中包含我們應(yīng)用程序的全部設(shè)置信息。這種處理辦法能夠輕松保證我們隨時(shí)對(duì)應(yīng)用程序中的任何組成部分進(jìn)行訪問。

如果大家正在開發(fā)的是通用型Windows應(yīng)用程序項(xiàng)目,那么使用IsolatedStorageSettings.ApplicationSettings將導(dǎo)致語法錯(cuò)誤。大家需要將其替換為Windows.Storage.ApplicationData.Current.LocalSettings。

3. IsolatedStorageFile

大家可以利用IsolatedStorageFile機(jī)制將文件保存在用戶設(shè)備之上。我們能夠在隔離式存儲(chǔ)當(dāng)中執(zhí)行多種操作,例如創(chuàng)建文件夾以及文件、向文件中寫入內(nèi)容、讀取數(shù)據(jù)以及移除文件等等。

這些文件與文件夾無法被同樣安裝在用戶設(shè)備上的其它應(yīng)用程序所訪問。其中IsolatedStorageFileStream類負(fù)責(zé)實(shí)現(xiàn)隔離式存儲(chǔ)中文件的讀取、寫入與創(chuàng)建。該類對(duì)FileStream進(jìn)行了拓展,這意味著大家可以在大多數(shù)FileStream實(shí)例能夠起效的場景下使用IsolatedStorageFileStream實(shí)例,例如構(gòu)建StreamReader或者StreamWriter。

文件寫入

以下代碼片段所示為如何在隔離式存儲(chǔ)中實(shí)現(xiàn)文件寫入。saveGameToIsolatedStorage會(huì)在隔離式存儲(chǔ)當(dāng)中創(chuàng)建一個(gè)新文件,并將message字符串保存于其中。

  1. private void saveGameToIsolatedStorage(string message) 
  2.     using (IsolatedStorageFile isf = 
  3.     IsolatedStorageFile.GetUserStoreForApplication()) 
  4.     { 
  5.        using (IsolatedStorageFileStream rawStream = isf.CreateFile("MyFile.store")) 
  6.     { 
  7.         StreamWriter writer = new StreamWriter(rawStream); 
  8.         writer.WriteLine(message); // save the message 
  9.         writer.Close(); 
  10.     } 
  11.     } 
  12. }

文件讀取

loadString函數(shù)負(fù)責(zé)讀取并返回包含在文件當(dāng)中的文本內(nèi)容。該函數(shù)利用FileExists首先檢查目標(biāo)文件在隔離式存儲(chǔ)內(nèi)是否存在,而后再利用StreamReader實(shí)例對(duì)文件進(jìn)行讀取。

  1. private string loadString() 
  2.     string result = null
  3.     using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication()) 
  4.     { 
  5.         if (isf.FileExists("Myfile.store"
  6.         { 
  7.             using (IsolatedStorageFileStream rawStream = isf.OpenFile(filename, 
  8.             System.IO.FileMode.Open)) 
  9.             { 
  10.                 StreamReader reader = new StreamReader(rawStream); 
  11.                 result = reader.ReadLine(); 
  12.                 reader.Close(); 
  13.             } 
  14.         } 
  15.     } 
  16.     return result; 

隔離式存儲(chǔ)機(jī)制不可用于Windows Store應(yīng)用程序。相反,這部分應(yīng)用程序數(shù)據(jù)類可以用于包含在Windows Runtine API中的Windows.Storage命名空間,從而實(shí)現(xiàn)本地?cái)?shù)據(jù)與文件的保存。

建議大家在不再需要時(shí),將IsolatedStorageFile與IsolatedStorageFileStream實(shí)例及時(shí)處理掉。using語句能夠自動(dòng)完成上述任務(wù),因此大家應(yīng)當(dāng)將其作為***實(shí)踐廣泛使用。

外部文件寫入

為了覆蓋外部文件的現(xiàn)有內(nèi)容,大家可以首先使用StreamWriter類將對(duì)應(yīng)文件打開。其中的FileMode.Open與FileAccess.Write參數(shù)專門負(fù)責(zé)打開目標(biāo)文件并執(zhí)行寫入訪問。這樣我們就能利用新數(shù)據(jù)將文件中的原有內(nèi)容加以覆蓋。

  1. IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication(); 
  2. if (myIsolatedStorage.FileExists(filename)) 
  3.     using (StreamWriter writeFile = new StreamWriter(new IsolatedStorageFileStream(filename, FileMode.Open, FileAccess.Write, myIsolatedStorage))) 
  4.     { 
  5.         string someTextData = "Learn to code using Tuts+"
  6.         writeFile.WriteLine(someTextData); 
  7.         writeFile.Close(); 

向現(xiàn)有文件中添加內(nèi)容

向現(xiàn)有文件中添加數(shù)據(jù)與向現(xiàn)有文件中寫入數(shù)據(jù)非常相似。惟一的區(qū)別在于,我們需要在FileMode.Append當(dāng)中設(shè)定文件模式。

  1. IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication(); 
  2. if (myIsolatedStorage.FileExists(filename)) 
  3.     if (myIsolatedStorage.FileExists(filename)) 
  4.     { 
  5.         using (StreamWriter writeFile = new StreamWriter(new IsolatedStorageFileStream(filename, FileMode.Append, FileAccess.Write, myIsolatedStorage))) 
  6.         { 
  7.             string someTextData = "Use Tuts+ to Learn Creative Skills, Shape Your Future"
  8.             writeFile.WriteLine(someTextData); 
  9.             writeFile.Close(); 
  10.         } 
  11.     } 

文本文件刪除

要?jiǎng)h除一個(gè)文本文件,我們首先需要檢查該文本文件是否存在于隔離式存儲(chǔ)當(dāng)中,而后利用DeleteFile實(shí)現(xiàn)文件刪除。

  1. IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication(); 
  2. if (myIsolatedStorage.FileExists(filename)) 
  3.     myIsolatedStorage.DeleteFile(filename); 

在這里,建議大家點(diǎn)擊此處查看更多示例應(yīng)用程序,從而進(jìn)一步了解如何在文件中讀取、寫入并添加其它數(shù)據(jù)。

4. 隔離式存儲(chǔ)資源管理器

在對(duì)應(yīng)用程序進(jìn)行調(diào)試的過程中,大家可能需要對(duì)應(yīng)用程序的隔離式存儲(chǔ)當(dāng)中對(duì)已經(jīng)保存的文件及文件夾進(jìn)行保存,從而驗(yàn)證正確的文件是否被保存在正確的位置。運(yùn)行有Windows Phone 8或者更低版本的模擬器及設(shè)備可以使用Windows Phone Power Tools,這款基于GUI的臣僚能夠?qū)Ω鲬?yīng)用程序的隔離式存儲(chǔ)內(nèi)容進(jìn)行訪問。

另一種選擇則是使用隔離式存儲(chǔ)資源管理器(Isolated Storage Explorer)或者簡稱ISETool,這款命令行工具隨同Windows Phone SDK一同安裝。大家可以利用ISETool對(duì)應(yīng)用程序本地文件夾內(nèi)的文件及目錄進(jìn)行羅列、復(fù)制以及替換。

ISETool適用于任何類型的設(shè)備或者模擬器,而且通常被安裝在以下位置:

Program Files(x86)\MicrosoftSDKs\WindowsPhone\v8.0\Tools\IsolatedStorageExplorerTool

下面來看使用ISETool時(shí)需要注意的幾點(diǎn)重要事項(xiàng):

  • 應(yīng)用程序必須被安裝在模擬器或者設(shè)備當(dāng)中。
  • 該模擬器或者設(shè)備必須已經(jīng)解鎖,但應(yīng)用程序并非必須處于運(yùn)行狀態(tài)。
  • 大家無法通過Windows Phone Store對(duì)已安裝應(yīng)用程序的隔離式存儲(chǔ)進(jìn)行訪問。
  • 大家無法利用ISETool通過IsolatedStorageSettings類查看所保存的設(shè)置信息。

要使用ISETool,大家需要使用以下語法:

1

ISETool.exe <cmd[:param]> <target-device[:param]> <product-id> [<desktop-path>]

下面再來看其它可以通過ISETool實(shí)現(xiàn)的操作。

從隔離式存儲(chǔ)中將文件復(fù)制到計(jì)算機(jī)當(dāng)中

  1. 將大家需要測試的應(yīng)用程序部署到模擬器或者設(shè)備當(dāng)中,而后創(chuàng)建本地文件及目錄。 
  2. 從WMAppManifest.xml文件當(dāng)中應(yīng)用元素的ProductID屬性處獲取應(yīng)用ID。
  3. 利用命令提示符前往ISETool.exe,而后運(yùn)行以下命令將應(yīng)用程序隔離式存儲(chǔ)內(nèi)的全部文件復(fù)制到計(jì)算機(jī)當(dāng)中。

1

ISETool.exe ts xd f8ce6878-0aeb-497f-bcf4-65be961d4bba c:\data\myfiles

在隔離式存儲(chǔ)中進(jìn)行文件替換

重復(fù)以上三個(gè)步驟,而后利用以下命令對(duì)應(yīng)用程序隔離式存儲(chǔ)中的文件進(jìn)行替換。

1

ISETool.exe rs xd f8ce6878-0aeb-497f-bcf4-65be961d4bba “C:\Data\My Files”

如果大家希望了解更多與ISETool相關(guān)的信息,不妨點(diǎn)擊此處查看我專門就ISETool使用撰寫的另一篇文章。

總結(jié)

我們?cè)赪indows Phone當(dāng)中擁有兩種簡單機(jī)制可供選擇,分別為IsolatedStorageSettings與IsolatedStorageFile。隔離式存儲(chǔ)是一套存儲(chǔ)區(qū),其中所包含的文件與目錄無法被其它應(yīng)用程序所訪問。隔離式存儲(chǔ)在多種場景下都能發(fā)揮重要作用,也歡迎大家點(diǎn)擊此處下載本教程相關(guān)源文件作為參考。

原文鏈接:Working With Isolated Storage on Windows Phone 8

核子可樂譯

 

責(zé)任編輯:閆佳明 來源: 51CTO譯文
相關(guān)推薦

2013-04-19 15:35:54

Windows Pho隔離存儲(chǔ)

2013-04-19 16:05:52

Windows PhoWindows Pho

2013-04-19 16:14:36

Windows PhoWindows Pho

2012-05-25 09:09:25

Windows Pho

2011-06-17 10:04:56

Windows PhoWindows Pho微軟

2013-04-09 12:59:21

WindowsPhon

2011-02-13 09:17:01

Windows 8Windows Pho

2012-03-16 21:25:14

Windows Pho

2013-01-28 14:59:27

2012-02-06 09:16:14

Windows PhoWindows Pho

2010-11-01 14:49:20

Windows PhoWindows Pho

2012-06-21 09:34:18

Windows Pho

2013-04-12 11:02:50

WWindowsPho

2012-06-21 09:37:50

Windows Pho存儲(chǔ)擴(kuò)充

2012-06-18 09:45:50

Windows Pho

2011-07-12 09:20:32

Windows 8Windows Pho

2012-02-20 23:12:45

Windows 8Windows Pho同步共享

2012-11-09 14:47:07

2011-10-13 15:04:12

Windows Ser

2013-01-28 15:06:20

Windows Pho
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)