Windows Phone 7 開發 31 日談——第15日:獨立儲存
By Jeff Blankenburg
本文是“Windows Phone 7 開發 31 日談” 系列的第15日。
昨天,我們討論了程式中的墓碑機制從而讓程式看起來是可以在後臺執行的。今天,我們來談談在電話中儲存本地資料的一種非常棒的方法。使用獨立儲存。
什麼是獨立儲存?
獨立儲存不是一個新概念。在Silverlight 2中已經在使用了。本質上說這是一種在本地檔案系統中儲存資料或檔案的方式。“獨立(isolated)”是因為只有你的程式才可以訪問這些資料。如果你有兩個應用程式,同時你想在它們之間共享資料的話,最好使用一些類似基於雲的可以讓你共享資料的服務。一個應用程式不能共享,呼叫裝置上其他的應用程式或與之進行互動。
設定和檔案
有兩種方式在本地儲存你的資料。第一是通過庫中的鍵/值對,叫做IsolatedStorageSettings。第二是通過建立真實的檔案和目錄,叫做IsolatedStorageFile。下圖簡要介紹了這些(由MSDN提供 ),我會為每種方式提供一個深入的例子。
IsolatedStorageSettings
有很多時候,這可能是你需要的唯一儲存方式。IsolatedStorageSettings允許你在一個字典中儲存鍵/值對(注意,無需任何設定),然後再讀取出來。這些資料會一直儲存著,無論應用程式停止/啟動,或者關機等等。除非你刪除它,或者使用者解除安裝你的應用程式,否則它一直存在。要記住的一點是 在它被新增到字典中之前你無法讀取它。在我的每個例子中,你都會看到在讀取資料之前檢查值是否它存在的程式碼。下面的例子是在使用者在你的程式中接收電子郵件更新時需要儲存使用者設定的程式碼。我用了一個多選框允許使用者選擇,還有一個將此值儲存到獨立儲存中的事件。
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Net;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Documents;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Animation;
- using System.Windows.Shapes;
- using Microsoft.Phone.Controls;
- using System.IO.IsolatedStorage;
- namespace Day15_IsolatedStorage
- {
- public partial class MainPage : PhoneApplicationPage
- {
- IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings;
- // Constructor
- public MainPage()
- {
- InitializeComponent();
- InitializeSettings();
- }
- private void InitializeSettings()
- {
- if (settings.Contains("emailFlag"))
- {
- EmailFlag.IsChecked = (bool)settings["emailFlag"];
- }
- else settings.Add("emailFlag", false);
- }
- private void EmailFlag_Unchecked(object sender, RoutedEventArgs e)
- {
- settings["emailFlag"] = false;
- }
- private void EmailFlag_Checked(object sender, RoutedEventArgs e)
- {
- settings["emailFlag"] = true;
- }
- }
- }
正如你所見,這非常簡單。請記住以下內容:
- 如果還沒在IsolatedStorageSettings中建立就讀取它的值會丟擲一個異常。確認你已經初始化了設定,或者總是使用Contains方法先檢查一下。
- 你可以在設定中儲存任意內容。在我的例子中,我儲存了一個布林值,但你可以儲存一個客戶物件,或者任何你能想到的。
- 記住當你讀取資料時你需要將它顯示強制轉換。你會看到我在使用之前將資料轉換為bool值。雖然你儲存了物件,但並沒有儲存它的型別。是否能看到型別取決於你自己。
- 設定一個值和在庫中新增它效果是一樣。“settings.Add()”的語句實際上不是必需的,我新增它是為了讓你看清語法。
就這些。IsolatedStorageSettings非常簡單。只用極少的程式碼就可儲存鍵/值對。建立和儲存檔案相對略複雜一些,但還是十分簡單。
IsolatedStorageFile
使用IsolatedStorageFile是一種讓你可以在使用者的裝置中儲存真實檔案的機制。在我的例子中,在一個子目錄中建立了一個文字檔案,並讀取檔案中的內容。我們還可以建立和刪除目錄,子目錄及檔案。看起來有很多程式碼,但實際上非常簡單。我們建立一個新的IsolatedStorageFile物件,並使用一個IsolatedStorageFileStream物件將它寫入到驅動器中。我在程式碼中加入了註釋,這樣你可以更清楚地看到發生了什麼。有兩個事件處理程式,一個用來儲存檔案,另一個讀取:
- using System.IO.IsolatedStorage;
- using System.IO;
- private void SaveButton_Click(object sender, RoutedEventArgs e)
- {
- //Obtain a virtual store for application
- IsolatedStorageFile fileStorage = IsolatedStorageFile.GetUserStoreForApplication();
- //Create new subdirectory
- fileStorage.CreateDirectory("textFiles");
- //Create a new StreamWriter, to write the file to the specified location.
- StreamWriter fileWriter = new StreamWriter(new IsolatedStorageFileStream("textFiles//newText.txt", FileMode.OpenOrCreate, fileStorage));
- //Write the contents of our TextBox to the file.
- fileWriter.WriteLine(writeText.Text);
- //Close the StreamWriter.
- fileWriter.Close();
- }
- private void GetButton_Click(object sender, RoutedEventArgs e)
- {
- //Obtain a virtual store for application
- IsolatedStorageFile fileStorage = IsolatedStorageFile.GetUserStoreForApplication();
- //Create a new StreamReader
- StreamReader fileReader = null;
- try
- {
- //Read the file from the specified location.
- fileReader = new StreamReader(new IsolatedStorageFileStream("textFiles//newText.txt", FileMode.Open, fileStorage));
- //Read the contents of the file (the only line we created).
- string textFile = fileReader.ReadLine();
- //Write the contents of the file to the TextBlock on the page.
- viewText.Text = textFile;
- fileReader.Close();
- }
- catch
- {
- //If they click the view button first, we need to handle the fact that the file hasn't been created yet.
- viewText.Text = "Need to create directory and the file first.";
- }
- }
離開程式時這多像一個迷人的魔術,再回來時,會再次載入檔案(它還在那兒!)。
你都知道了。現在我們在Windows Phone 7中有兩種儲存機制可以用。IsolatedStorageSettings和IsolatedStorageFile。我很樂意聽到你在程式中使用這兩種儲存結構的創新用法。請留言!
下載程式碼示例
這個例子將上面展示的程式碼融合到了一個專案中。
原文地址:http://www.jeffblankenburg.com/post/31-Days-of-Windows-Phone-7c-Day-15-Isolated-Storage.aspx
相關文章
- Windows Phone 7 開發 31 日談——第7日:啟動器Windows
- Windows Phone 7 開發 31 日談——第25日:外部APIWindowsAPI
- Windows Phone 7 開發 31 日談——第24日:嵌入字型Windows
- Windows Phone 7 開發 31 日談——第19日:推送通知Windows
- Windows Phone 7 開發 31 日談——第3日:返回鍵Windows
- Windows Phone 7 開發 31 日談——第16日:全景檢視Windows
- Windows Phone 7 開發 31 日談——第13日:位置服務Windows
- Windows Phone 7 開發 31 日談——第8日:選擇器Windows
- Windows Phone 7 開發 31 日談——第4日:裝置方向Windows
- Windows Phone 7 開發 31 日談——第1日:專案模板Windows
- Windows Phone 7 開發 31 日談——第21日:Silverlight Toolkit for Windows PhoneWindows
- Windows Phone 7 開發 31 日談——第18日:WebBrowser控制元件WindowsWeb控制元件
- Windows Phone 7 開發 31 日談——第11日:加速感應器Windows
- Windows Phone 7 開發 31 日談——第5日:系統主題Windows
- Windows Phone 7 開發 31 日談——第2日:頁面導航Windows
- Windows Phone 7 開發 31 日談——第22日:應用?還是 遊戲?Windows遊戲
- Windows Phone 7 開發 31 日談——第20日:地圖控制元件Windows地圖控制元件
- Windows Phone 7 開發 31 日談——第17日:樞軸控制元件Windows控制元件
- Windows Phone 7 開發 31 日談——第14日:墓碑機制(多工)Windows
- Windows Phone 7 開發 31 日談——第12日:使手機震動Windows
- Windows Phone 7 開發 31 日談——第23日:提供試用版應用程式Windows
- Windows Phone 7 開發 31 日談——第26日:與其他開發人員(免費)分享你的程式Windows
- ·Windows Phone 7首款機型8月25日開賣Windows
- Windows phone應用開發[15]-輔助工具Windows
- 一起學Windows Phone7開發(十四.一 Phone Task)Windows
- Windows Phone7開發系列視訊地址Windows
- 開發日誌7
- 5.9安卓開發日記31安卓
- lumen cli日誌和普通日誌分開儲存
- Silverlight Isolated Storage 獨立儲存
- 7月18日—7月24日共有31款遊戲開測|GameRes遊戲GAM
- 安卓開發日記15安卓
- 7.week 獨立開發第七週週報
- 獨立開發挑戰
- 7月15日—7月21日共有57款遊戲開測|GameRes遊戲GAM
- 【儲存管理】日誌管理
- 7月31日,HarmonyOS開發者日將於杭州舉辦
- 袋鼠儲存 v1.2 正式支援獨立組網