2010年11月26日 星期五

IsolatedStorage

據說這是從 Silverlight 2.0 開始有的東東,
剛查到這個東西時感覺和 Android 的觀念很像,
只有建立它的那個App可以存取自己 Isolated Storage 裡的資料,

會知道這個東西是因為最近寫 WP7 的 App 時,必須存放一些設定在裝置上,
但微軟並沒有開放第三方軟體廠商存取 Registry 的權限,
當然,WP7 中也沒有檔案總管的概念,在放置 App 需要或產生的檔案也是個問題,
而取代的方案就是Isolated Storage


using System.IO.IsolatedStorage;


而使用的方式大致上分為兩大類,和 Android 的獨立記憶體空間 Preference 很像,

System.IO.IsolatedStorage.IsolatedStorageFile

以應用程式為單位產生的私有檔案系統目錄(虛擬),
存取的方式很簡單,配合 IsolatedStorageFileStream 就可以讀取了,
在應用程式私有的檔案空間中,資料夾與檔案的建立基本上不會有什麼問題,
目前查到的資料顯示,似乎也沒有限制空間的問題,僅受限於硬體空間,
官方參考資料於此:Isolated Storage FileIsolated Storage File Stream

System.IO.IsolatedStorage.IsolatedStorageSettings

以 Key 對應 Value 的方式儲存應用程式私有的設定值,
和舊系統所使用的 Registry 觀念很像,
官方參考資料於此:Isolated Storage Settings

簡單的做個範例,例如在 Android 中這段指令,讓我們可以讀出用戶上次鍵入的帳號密碼,
也許在用戶開啟登入功能時利用讀取 Preferences 並幫他們填上之前的帳號密碼是個不錯的做法。


// Java - Android

import android.content.SharedPreferences;

private Preference pf_UserId, pf_UserPwd;
pf_UserId = findPreference("User_Id");
pf_UserId = findPreference("User_Pwd");

private Preference findPreference(String key)
{
  return getPreferenceScreen().findPreference(key);
}


這是 Silverlight 的版本


// C# - Silverlight

using System.IO.IsolatedStorage;

string strUserId, strUserPwd;

private IsolatedStorageSettings userSettings = IsolatedStorageSettings.ApplicationSettings;

if(userSettings.Contains("User_Id"))
{
  strUserId = (string)userSettings["User_Id"];
}
else
{
  userSettings.Add("User_Id", (object)string.Empty);
}

if(userSettings.Contains("strUserPwd"))
{
  try
  {
    strUserPwd = (string)userSettings["User_Pwd"];
  }
  cache (System.Collections.Generic.KeyNotFoundException)
  {
    strUserPwd = string.Empty;
  }
}
else
{
  userSettings.Add("User_Pwd", (object)string.Empty);
}

txt_UserId.Text = strUserId;
txt_UserPwd.Text = strUserPwd;

// Save Id & Pwd When Login Completed

userSettings["User_Id"] = txt_UserId.Text;
userSettings["User_Pwd"] = txt_UserPwd.Text;

沒有留言:

張貼留言