Windows Phone 7的隔離儲存空間
- 概念:
Windows Phone 7中所有的檔案IO操作被限制在隔離儲存空間裡面,在隔離儲存空間裡面可以增加,刪除和修改目錄檔案,在隔離儲存空間裡面可以儲存程式的配置資訊,但是每個應用程式的隔離儲存空間都是獨立的,相當於Windows Phone 的一塊記憶體被單獨划出來了,只有這一塊的內部(應用程式本身)才可以訪問其內部的資訊,而外部(其他的應用程式)無法訪問。
2. 目錄操作
兩個重要的類:
IsolatedStorageFile:用於操作隔離儲存空間裡面的目錄以及檔案,例如增,刪,改,查等。
IsolatedStorageFileStream:用於讀寫操控隔離儲存空間裡面的檔案流,例如當我們需要往某個檔案寫入東西的時候便會使用到這個類。
IsolatedStorageSettings:用於儲存程式的配置資訊的Dictionary,例如應用程式的一些Key和Value等。
3. 使用隔離儲存空間需要引用兩個命名空間:
using System.IO.IsolatedStorage;using System.IO;
對隔離儲存空間的操作和傳統的檔案IO操作類似。
在隔離儲存空間裡裡面沒有絕對路徑或則說沒有根目錄,通常來說例如在我們的Windows 電腦上,一個檔案夾它的根目錄在C盤或則D盤或則E盤等等,但是在Windows Phone 7中則沒有根目錄,因此也就沒有絕對路徑。所以我們要取得應用程式的隔離儲存空間不能通過路徑來獲得,只能通過GetUserStoreForApplication()方法來獲得。
樣本示範:
using System.IO.IsolatedStorage;using System.IO; private const string FolderName = "temp1";//定義一個常量,必須在此初始化 private void newbutton_Click(object sender, RoutedEventArgs e) { using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication()) //使用using表示這個類使用完之後可以自動的釋放資源,即調用Dispose()方法。//獲得應用程式的隔離儲存空間 { file.CreateDirectory(FolderName);//建立一個檔案夾 MessageBox.Show("建立成功!"); } } private void Checkbutton_Click(object sender, RoutedEventArgs e) { using (IsolatedStorageFile file=IsolatedStorageFile.GetUserStoreForApplication()) { if(file.DirectoryExists(FolderName))//目錄存在 { MessageBox.Show(FolderName+"已經存在!"); } else { MessageBox.Show(FolderName+"不存在!"); } } } private void Deletebutton_Click(object sender, RoutedEventArgs e) { using (IsolatedStorageFile file=IsolatedStorageFile.GetUserStoreForApplication()) { if(file.DirectoryExists(FolderName)) { file.DeleteDirectory(FolderName);//刪除目錄 MessageBox.Show(FolderName + "檔案已刪除"); } else { MessageBox.Show("沒有可刪除的檔案"); } } }
4. 檔案操作
檔案操作和目錄的操作類似,也包括增,刪,改,查等操作.
a. 建立檔案操作
using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication()) { FileStream filestream = file.CreateFile(FileName);//建立一個檔案 filestream.Close();//關閉檔案流,若不關閉,則刪除操作出現異常//這裡由於CreateFile()返回的是一個檔案流,即FileStream,因此我們聲明一個FileStream//變數來儲存這個檔案 }
b. 刪除文價操作
using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication()) { if (file.FileExists(FileName)) //檢查檔案 { file.DeleteFile(FileName); } }
c. 檔案資訊的寫入和讀取(請看下面代碼)
private void Writebutton_Click(object sender, RoutedEventArgs e) {//獲得應用程式的隔離儲存空間using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication()) {//開啟檔案流,FileMode.OpenOrCreate表示如果檔案不存在則建立檔案,//FileAccess.Write表示是寫入操作 using (IsolatedStorageFileStream filestream = file.OpenFile(FileName, FileMode.OpenOrCreate, FileAccess.Write)) { StreamWriter strw = new StreamWriter(filestream);//指定往我們開啟的檔案流中寫入資訊 strw.WriteLine(MsgtextBox.Text);//將MsgtextBox中的Text值寫入檔案中 strw.Close();//關閉檔案寫入 } } } private void Readbutton_Click(object sender, RoutedEventArgs e) {//獲得應用程式的隔離儲存空間using (IsolatedStorageFile file = IsolatedStorageFile.GetUserStoreForApplication()) { if (file.FileExists(FileName))//如果檔案存在才可進行讀取 {//開啟要讀取的檔案流,FileMode.Open表示只開啟檔案,//FileAccess.Read表示是進行讀取操作 using (IsolatedStorageFileStream filestream = file.OpenFile(FileName, FileMode.Open, FileAccess.Read)) { StreamReader strr = new StreamReader(filestream);//指定向開啟的檔案流讀取資訊 MsgtextBox.Text = strr.ReadToEnd();//讀取檔案的全部資訊 strr.Close();//關閉讀取操作 } } } }
讀取及寫入檔案小結:
首先我們需要獲得應用程式的隔離儲存空間,然後我們需要開啟指定的檔案(開啟之後是以檔案流的形式返回),在開啟檔案的過程中有幾種情況並通過FileMode來確定我們要以那種方式開啟。接著便可以對其檔案進行相應的操作,通過FileAccess來確定我們是想進行讀取還是寫入的操作。
5. 隔離儲存空間的配置資訊
a. 往隔離儲存空間的配置資訊中寫入資訊
private void SettingsWritebutton_Click(object sender, RoutedEventArgs e) { //將Settings放入ApplicationSettings的字典中,並將SettingstextBox的值賦給Settings IsolatedStorageSettings.ApplicationSettings[Settings] = SettingstextBox.Text; IsolatedStorageSettings.ApplicationSettings.Save();//儲存資訊,這一步非常關鍵,如果不儲存,那麼我們剛才添加的Settings資訊就不會儲存到應用程式的隔離儲存空間中,而是放在了記憶體中,因此將無法讀取Settings。 }
b. 從隔離儲存空間的配置資訊中讀取資訊
private void SettingsReadbutton_Click(object sender, RoutedEventArgs e) { //判斷字典中是否有Settings這個Key,如果有則將其值賦給SettingstextBox if (IsolatedStorageSettings.ApplicationSettings.Contains(Settings)) { //由於字典中存放的是對象,取出來之後需要轉換為相應的資料類型。 SettingstextBox.Text = IsolatedStorageSettings.ApplicationSettings[Settings] as string; } }
說明:以上內容參考Jake Lin的視頻而寫,不懂可參考Jake Lin的視頻,值得大家一看。
(著作權,轉載請標明出處)