[源码下载]
稳扎稳打Silverlight(16) - 2.0数据之独立存储(Isolated Storage)
作者:webabcd
介绍
Silverlight 2.0 数据的独立存储(Isolated Storage):
IsolatedStorageFile - 操作 独立存储 的类
IsolatedStorageFile.GetUserStoreForSite() - 按站点获取用户的独立存储
IsolatedStorageFile.GetUserStoreForApplication() - 按应用程序获取用户的独立存储
IsolatedStorageSettings - 在独立存储中保存的 key-value 字典表
IsolatedStorageSettings.SiteSettings - 按站点保存的 key-value 字典表
IsolatedStorageSettings.ApplicationSettings - 按应用程序保存的 key-value 字典表
在线DEMO
http://www.cnblogs.com/webabcd/archive/2008/10/09/1307486.html
示例
IsolatedStorage.xaml
<UserControl x:Class="Silverlight20.Data.IsolatedStorage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StackPanel HorizontalAlignment="Left">
<TextBox x:Name="txtMsg" Margin="5" />
<TextBox x:Name="txtMsg2" Margin="5" />
<Button x:Name="increase" Content="增加配额" Click="increase_Click" Margin="5" />
</StackPanel>
</UserControl>
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StackPanel HorizontalAlignment="Left">
<TextBox x:Name="txtMsg" Margin="5" />
<TextBox x:Name="txtMsg2" Margin="5" />
<Button x:Name="increase" Content="增加配额" Click="increase_Click" Margin="5" />
</StackPanel>
</UserControl>
IsolatedStorage.xaml.cs
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 System.IO.IsolatedStorage;
using System.IO;
namespace Silverlight20.Data
{
public partial class IsolatedStorage : UserControl
{
public IsolatedStorage()
{
InitializeComponent();
// 演示 IsolatedStorageFile
Demo();
// 演示 IsolatedStorageSettings
Demo2();
}
/// <summary>
/// 演示 IsolatedStorageFile
/// </summary>
void Demo()
{
// Isolated Storage - 独立存储。一个虚拟文件系统
// IsolatedStorageFile - 操作 独立存储 的类
// IsolatedStorageFile.GetUserStoreForSite() - 按站点获取用户的独立存储
// IsolatedStorageFile.GetUserStoreForApplication() - 按应用程序获取用户的独立存储
// using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForSite())
using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
{
// DirectoryExists(path) - 指定的路径是否存在
// CreateDirectory(path) - 创建指定的路径
// FileExists(path) - 指定的文件是否存在
// CreateFile(path) - 创建指定的文件
// GetDirectoryNames() - 获取根目录下的目录名数组
// GetFileNames()() - 获取根目录下的文件名数组
// GetDirectoryNames(path) - 获取指定目录下的目录名数组
// GetFileNames(path) - 获取指定目录下的文件名数组
// OpenFile() - 打开指定的文件。具体参数参看文档
// DeleteFile(path) - 删除指定的文件
// DeleteDirectory(path) - 删除指定的目录(要求目录存在,且目录内无内容)
// Remove() - 关闭 IsolatedStorageFile 对象并移除独立存储内的全部内容
// 在根目录下创建指定的目录
if (!isf.DirectoryExists("Directory01"))
isf.CreateDirectory("Directory01");
if (!isf.DirectoryExists("Directory02"))
isf.CreateDirectory("Directory02");
// 创建指定的子目录
string subDirectory01 = System.IO.Path.Combine("Directory01", "SubDirectory01");
string subDirectory02 = System.IO.Path.Combine("Directory01", "SubDirectory02");
if (!isf.DirectoryExists(subDirectory01))
isf.CreateDirectory(subDirectory01);
if (!isf.DirectoryExists(subDirectory02))
isf.CreateDirectory(subDirectory02);
// 根目录下创建指定的文件
if (!isf.FileExists("RootFile.txt"))
{
IsolatedStorageFileStream isfs = isf.CreateFile("RootFile01.txt");
isfs.Close();
}
// 在指定的目录下创建指定的文件
string file01 = System.IO.Path.Combine(subDirectory01, "File01.txt");
string file02 = System.IO.Path.Combine(subDirectory01, "File02.txt");
string file03 = System.IO.Path.Combine(subDirectory01, "File03.xml");
if (!isf.FileExists(file01))
{
// IsolatedStorageFileStream - 独立存储内的文件流。继承自 FileStream
IsolatedStorageFileStream isfs = isf.CreateFile(file01);
isfs.Close();
}
if (!isf.FileExists(file02))
{
IsolatedStorageFileStream isfs = isf.CreateFile(file02);
isfs.Close();
}
if (!isf.FileExists(file03))
{
IsolatedStorageFileStream isfs = isf.CreateFile(file03);
isfs.Close();
}
txtMsg.Text += "根目录下的目录列表:\r\n";
// 获取根目录下的目录名数组
foreach (string directoryName in isf.GetDirectoryNames())
{
txtMsg.Text += directoryName + "\r\n";
}
txtMsg.Text += "根目录下的文件列表:\r\n";
// 获取根目录下的文件名数组
foreach (string fileName in isf.GetFileNames())
{
txtMsg.Text += fileName + "\r\n";
}
txtMsg.Text += "目录 Directory01 下的目录列表:\r\n";
// 获取 Directory01 目录下的目录名数组
foreach (string directoryName in isf.GetDirectoryNames(subDirectory01))
{
txtMsg.Text += directoryName + "\r\n";
}
txtMsg.Text += "目录 Directory01/SubDirectory01 下的*.txt文件列表:\r\n";
// 获取 Directory01/SubDirectory01 目录下的后缀名为 txt 的文件名数组
foreach (string fileName in isf.GetFileNames(System.IO.Path.Combine(subDirectory01, "*.txt")))
{
txtMsg.Text += fileName + "\r\n";
}
if (isf.FileExists(file01))
{
// 在文件 file01 中写入内容
IsolatedStorageFileStream streamWrite = isf.OpenFile(file01, FileMode.Open, FileAccess.Write);
using (StreamWriter sw = new StreamWriter(streamWrite))
{
sw.WriteLine("我是:webabcd");
sw.WriteLine("我专注于asp.net, Silverlight");
}
txtMsg.Text += "文件 File01.txt 的内容:\r\n";
// 读取文件 file01 中的内容
IsolatedStorageFileStream streamRead = isf.OpenFile(file01, FileMode.Open, FileAccess.Read);
using (StreamReader sr = new StreamReader(streamRead))
{
txtMsg.Text += sr.ReadToEnd();
}
}
// 删除文件 file01
if (isf.FileExists(file01))
{
isf.DeleteFile(file01);
}
try
{
// 删除目录 subDirectory01
isf.DeleteDirectory(subDirectory01);
}
catch (IsolatedStorageException ex)
{
// IsolatedStorageException - 操作临时存储失败时抛出的异常
// 因为 subDirectory01 目录内还有文件,所以会抛异常
txtMsg.Text += ex.Message;
}
}
}
/// <summary>
/// 演示 IsolatedStorageSettings
/// </summary>
void Demo2()
{
// IsolatedStorageSettings - 在独立存储中保存的 key-value 字典表
// IsolatedStorageSettings.SiteSettings - 按站点保存的 key-value 字典表
// IsolatedStorageSettings.ApplicationSettings - 按应用程序保存的 key-value 字典表
IsolatedStorageSettings iss = IsolatedStorageSettings.ApplicationSettings;
// Add(key, value) - 添加一对 key-value
iss.Add("key", "value");
txtMsg2.Text += (string)iss["key"] + "\r\n";
// 修改指定的 key 的 value
iss["key"] = "value2";
txtMsg2.Text += (string)iss["key"] + "\r\n";
// Remove(key) - 移除指定的 key
// Count - 字典表内的总的 key-value 数
iss.Remove("key");
txtMsg2.Text += iss.Count;
}
private void increase_Click(object sender, RoutedEventArgs e)
{
// 演示独立存储的配额的相关操作
using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
{
// Quota - 当前配额(KB)
// IncreaseQuotaTo(newQuotaSize) - 增加到指定的配额
// AvailableFreeSpace - 当前的可用配额
isf.IncreaseQuotaTo(isf.Quota + 1 * 1024 * 1024);
System.Windows.Browser.HtmlPage.Window.Alert(
string.Format("当前配额:{0};可用配额:{1}", isf.Quota, isf.AvailableFreeSpace));
}
}
}
}
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 System.IO.IsolatedStorage;
using System.IO;
namespace Silverlight20.Data
{
public partial class IsolatedStorage : UserControl
{
public IsolatedStorage()
{
InitializeComponent();
// 演示 IsolatedStorageFile
Demo();
// 演示 IsolatedStorageSettings
Demo2();
}
/// <summary>
/// 演示 IsolatedStorageFile
/// </summary>
void Demo()
{
// Isolated Storage - 独立存储。一个虚拟文件系统
// IsolatedStorageFile - 操作 独立存储 的类
// IsolatedStorageFile.GetUserStoreForSite() - 按站点获取用户的独立存储
// IsolatedStorageFile.GetUserStoreForApplication() - 按应用程序获取用户的独立存储
// using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForSite())
using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
{
// DirectoryExists(path) - 指定的路径是否存在
// CreateDirectory(path) - 创建指定的路径
// FileExists(path) - 指定的文件是否存在
// CreateFile(path) - 创建指定的文件
// GetDirectoryNames() - 获取根目录下的目录名数组
// GetFileNames()() - 获取根目录下的文件名数组
// GetDirectoryNames(path) - 获取指定目录下的目录名数组
// GetFileNames(path) - 获取指定目录下的文件名数组
// OpenFile() - 打开指定的文件。具体参数参看文档
// DeleteFile(path) - 删除指定的文件
// DeleteDirectory(path) - 删除指定的目录(要求目录存在,且目录内无内容)
// Remove() - 关闭 IsolatedStorageFile 对象并移除独立存储内的全部内容
// 在根目录下创建指定的目录
if (!isf.DirectoryExists("Directory01"))
isf.CreateDirectory("Directory01");
if (!isf.DirectoryExists("Directory02"))
isf.CreateDirectory("Directory02");
// 创建指定的子目录
string subDirectory01 = System.IO.Path.Combine("Directory01", "SubDirectory01");
string subDirectory02 = System.IO.Path.Combine("Directory01", "SubDirectory02");
if (!isf.DirectoryExists(subDirectory01))
isf.CreateDirectory(subDirectory01);
if (!isf.DirectoryExists(subDirectory02))
isf.CreateDirectory(subDirectory02);
// 根目录下创建指定的文件
if (!isf.FileExists("RootFile.txt"))
{
IsolatedStorageFileStream isfs = isf.CreateFile("RootFile01.txt");
isfs.Close();
}
// 在指定的目录下创建指定的文件
string file01 = System.IO.Path.Combine(subDirectory01, "File01.txt");
string file02 = System.IO.Path.Combine(subDirectory01, "File02.txt");
string file03 = System.IO.Path.Combine(subDirectory01, "File03.xml");
if (!isf.FileExists(file01))
{
// IsolatedStorageFileStream - 独立存储内的文件流。继承自 FileStream
IsolatedStorageFileStream isfs = isf.CreateFile(file01);
isfs.Close();
}
if (!isf.FileExists(file02))
{
IsolatedStorageFileStream isfs = isf.CreateFile(file02);
isfs.Close();
}
if (!isf.FileExists(file03))
{
IsolatedStorageFileStream isfs = isf.CreateFile(file03);
isfs.Close();
}
txtMsg.Text += "根目录下的目录列表:\r\n";
// 获取根目录下的目录名数组
foreach (string directoryName in isf.GetDirectoryNames())
{
txtMsg.Text += directoryName + "\r\n";
}
txtMsg.Text += "根目录下的文件列表:\r\n";
// 获取根目录下的文件名数组
foreach (string fileName in isf.GetFileNames())
{
txtMsg.Text += fileName + "\r\n";
}
txtMsg.Text += "目录 Directory01 下的目录列表:\r\n";
// 获取 Directory01 目录下的目录名数组
foreach (string directoryName in isf.GetDirectoryNames(subDirectory01))
{
txtMsg.Text += directoryName + "\r\n";
}
txtMsg.Text += "目录 Directory01/SubDirectory01 下的*.txt文件列表:\r\n";
// 获取 Directory01/SubDirectory01 目录下的后缀名为 txt 的文件名数组
foreach (string fileName in isf.GetFileNames(System.IO.Path.Combine(subDirectory01, "*.txt")))
{
txtMsg.Text += fileName + "\r\n";
}
if (isf.FileExists(file01))
{
// 在文件 file01 中写入内容
IsolatedStorageFileStream streamWrite = isf.OpenFile(file01, FileMode.Open, FileAccess.Write);
using (StreamWriter sw = new StreamWriter(streamWrite))
{
sw.WriteLine("我是:webabcd");
sw.WriteLine("我专注于asp.net, Silverlight");
}
txtMsg.Text += "文件 File01.txt 的内容:\r\n";
// 读取文件 file01 中的内容
IsolatedStorageFileStream streamRead = isf.OpenFile(file01, FileMode.Open, FileAccess.Read);
using (StreamReader sr = new StreamReader(streamRead))
{
txtMsg.Text += sr.ReadToEnd();
}
}
// 删除文件 file01
if (isf.FileExists(file01))
{
isf.DeleteFile(file01);
}
try
{
// 删除目录 subDirectory01
isf.DeleteDirectory(subDirectory01);
}
catch (IsolatedStorageException ex)
{
// IsolatedStorageException - 操作临时存储失败时抛出的异常
// 因为 subDirectory01 目录内还有文件,所以会抛异常
txtMsg.Text += ex.Message;
}
}
}
/// <summary>
/// 演示 IsolatedStorageSettings
/// </summary>
void Demo2()
{
// IsolatedStorageSettings - 在独立存储中保存的 key-value 字典表
// IsolatedStorageSettings.SiteSettings - 按站点保存的 key-value 字典表
// IsolatedStorageSettings.ApplicationSettings - 按应用程序保存的 key-value 字典表
IsolatedStorageSettings iss = IsolatedStorageSettings.ApplicationSettings;
// Add(key, value) - 添加一对 key-value
iss.Add("key", "value");
txtMsg2.Text += (string)iss["key"] + "\r\n";
// 修改指定的 key 的 value
iss["key"] = "value2";
txtMsg2.Text += (string)iss["key"] + "\r\n";
// Remove(key) - 移除指定的 key
// Count - 字典表内的总的 key-value 数
iss.Remove("key");
txtMsg2.Text += iss.Count;
}
private void increase_Click(object sender, RoutedEventArgs e)
{
// 演示独立存储的配额的相关操作
using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication())
{
// Quota - 当前配额(KB)
// IncreaseQuotaTo(newQuotaSize) - 增加到指定的配额
// AvailableFreeSpace - 当前的可用配额
isf.IncreaseQuotaTo(isf.Quota + 1 * 1024 * 1024);
System.Windows.Browser.HtmlPage.Window.Alert(
string.Format("当前配额:{0};可用配额:{1}", isf.Quota, isf.AvailableFreeSpace));
}
}
}
}
演示 IsolatedStorageFile 的运行结果:
根目录下的目录列表:
Directory01
Directory02
根目录下的文件列表:
RootFile01.txt
__LocalSettings
目录 Directory01 下的目录列表:
SubDirectory01
目录 Directory01/SubDirectory01 下的*.txt文件列表:
File01.txt
File02.txt
文件 File01.txt 的内容:
我是:webabcd
我专注于asp.net, Silverlight
无法删除,目录不为空或不存在。
演示 IsolatedStorageSettings 的运行结果:
value
value2
0
OK
[源码下载]