对于每个应用程序,系统都会自动为之分配手机闪存中的一部分独立的存储空间,使其可在其中无法被其他应用程序访问的独立区域中存储信息。应用程序可以在此处保存任意类型的文件或数据。
在SDK 7.1中,本地存储大致上共有如下三种方式:
- Settings:通过类IsolatedStorageSettings使用键值对的方式存储信息。
- Files: 通过类IsolatedStorageFile可以实现文件,文件夹的管理。
- Local Database: 使用LINQ to SQL来实现对local database的存储及访问。
(1)IsolatedStorageSettings
IsolatedStorageSettings允许你在一个字典中存储键/值对(注意,无需任何设定),然后再读取出来。这些数据会一直保存着,无论应用程序停止/启动,或者关机等等。除非你删除它,或者用户卸载你的应用程序,否则它一直存在。要记住的一点是在它被添加到字典中之前你无法读取它。
IsolatedStorageSettings 可提供一种将用户特定数据存储为本地 IsolatedStorageFile 中的键/值对的便捷方法。一种典型的用途是保存设置,例如,每页显示的图像数、页面布局选项等。
用户设置可以是特定于某个应用程序的,也可以是在同一个域中的多个应用程序之间共享的。ApplicationSettings 存储为每个应用程序的设置、每台计算机的设置以及每个用户的设置。其范围由应用程序 .xap 文件的完整路径来决定。SiteSettings 存储为每个域的设置、每台计算机的设置以及每个用户的设置。其范围由承载应用程序 .xap 文件的子域来决定。
例如,位于 http://www.contoso.com/site1/application.xap 的应用程序将与位于http://www.contoso.com/site2/application.xap 的应用程序具有不同的 ApplicationSettings。但是,这两个应用程序将共享相同的 SiteSettings,因为它们承载于同一个子域中。
(2)IsolatedStorageFile
IsolatedStorageFile表示包含文件和目录的独立存储区。使用IsolatedStorageFile是一种让你可以在用户的设备中存储真实文件的机制。
该类使独立存储的虚拟文件系统抽象化。IsolatedStorageFile 对象对应于特定的独立存储范围,在该范围中存在由 IsolatedStorageFileStream 对象表示的文件。应用程序可以使用独立存储将数据保存在文件系统中这些数据自己的独立部分,而不必在文件系统中指定特定的路径。
虚拟文件系统的根位于物理文件系统上经过模糊处理的每用户文件夹中。由主机提供的每个唯一标识符都映射为不同的根,该根为每个应用程序提供它自己的虚拟文件系统。应用程序不能从它自己的文件系统导航到另一个文件系统中。因为独立存储区在特定程序集的范围内,所以其他大多数托管代码都不能访问您的代码的数据(高度受信任的托管代码和管理工具可以从其他程序集访问存储区)。非托管代码可以访问任何独立存储区。
我们可以通过类 IsolatedStorageFile 的 GetUserStoreForApplication()方法获得该application分配的独立空间。
Demo:创建新文件或打开现有文件(例如文本文件)、读取文件,并将其信息显示在手机的显示屏中。
private void btnSave_Click(object sender, RoutedEventArgs e)
{string filename = "test.txt";
//得到独立空间的引用
var appStorage = IsolatedStorageFile.GetUserStoreForApplication();
//以只写的方式打开(不存在就创建)文件
using (var file = appStorage.OpenFile(filename, FileMode.OpenOrCreate, FileAccess.Write))
{
using (StreamWriter sw = new StreamWriter(file))
{
sw.Write(myTextbox.Text);
}
}
}
private void btnClear_Click(object sender, RoutedEventArgs e)
{
myTextbox.Text = String.Empty;
}
private void btnOpen_Click(object sender, RoutedEventArgs e)
{
string filename = "test.txt";
var appStorage = IsolatedStorageFile.GetUserStoreForApplication();
using (var file = appStorage.OpenFile(filename, FileMode.Open, FileAccess.Read))
{
using (StreamReader sr = new StreamReader(file))
{
myTextbox.Text = sr.ReadToEnd();
}
}
}