SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇)
在"SilverLight学习笔记--进一步学习Isolated Storage独立存储一(理论篇)"中,我们对Isolated Storage独立存储相关概念进行了清理,在本篇,我们一起通过建立一个实例来看看Isolated Storage独立存储常见的相关操作。
首先我们在VS2008下新建立一个Silverligth应用程序,程序名命名为:MyIsolateSL.
编辑Page.xaml文件,建立程序用户界面,如图
Page.xaml代码如下:
< UserControl xmlns:basics ="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls" x:Class ="MyIsolateSL.Page"
xmlns ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x ="http://schemas.microsoft.com/winfx/2006/xaml"
Width ="800" Height ="600" >
< StackPanel Orientation ="Vertical" Background ="Wheat" >
< TextBlock Text ="文件方式" Foreground ="Blue" FontSize ="18" ></ TextBlock >
< Grid Width ="800" Height ="300" Background ="Beige" >
< StackPanel Orientation ="Horizontal" >
< Border BorderThickness ="2" BorderBrush ="Azure" >
< StackPanel Width ="400" Height ="300" Orientation ="Vertical" >
< TextBlock Text ="目录操作" Width ="400" ></ TextBlock >
< Canvas Width ="400" Height ="280" >
< ListBox x:Name ="lstbxDirList" Width ="398" Height ="90" ></ ListBox >
< TextBlock Text ="一级目录名:" Margin ="8,100,0,0" ></ TextBlock >
< TextBox x:Name ="txtBxDirName" Width ="100" Margin ="70,100,0,0" ></ TextBox >
< TextBlock Text ="子目录名:" Margin ="180,100,0,0" ></ TextBlock >
< TextBox x:Name ="txtBxSubDirName" Width ="100" Margin ="240,100,0,0" ></ TextBox >
< Button x:Name ="btnGetDir" Content =" 获取根目录下第一级目录列表" Margin ="20,140,0,0" Click ="btnGetDir_Click" ></ Button >
< Button x:Name ="btnGetSubDir" Content =" 获取指定第一级目录下的子目录列表" Margin ="200,140,0,0" Click ="btnGetSubDir_Click" ></ Button >
< Button x:Name ="btnCreateDir" Content =" 在根目录下创建第一级目录 " Margin ="20,165,0,0" Click ="btnCreateDir_Click" ></ Button >
< Button x:Name ="btnCreateSubDir" Content =" 在指定第一级目录下创建子目录 " Margin ="200,165,0,0" Click ="btnCreateSubDir_Click" ></ Button >
< Button x:Name ="btnDelDir" Content =" 删除指定第一级目录 " Margin ="20,190,0,0" Click ="btnDelDir_Click" ></ Button >
< Button x:Name ="btnDelSubDir" Content =" 删除指定第一级目录下的指定子目录 " Margin ="200,190,0,0" Click ="btnDelSubDir_Click" ></ Button >
< Button x:Name ="btnExistDir" Content =" 判断指定一级目录是否存在" Margin ="20,215,0,0" Click ="btnExistDir_Click" ></ Button >
< Button x:Name ="btnExistSubDir" Content =" 判断指定子目录是否存在" Margin ="200,215,0,0" Click ="btnExistSubDir_Click" ></ Button >
< Button x:Name ="btnClearDirList" Content =" 清空目录列表" Margin ="200,240,0,0" Click ="btnClearDirList_Click" ></ Button >
< TextBlock x:Name ="tbDirMsg" Text ="操作结果:" Margin ="8,260,0,0" FontSize ="12" Foreground ="red" ></ TextBlock >
</ Canvas >
</ StackPanel >
</ Border >
< Border BorderThickness ="2" BorderBrush ="Azure" >
< StackPanel Width ="400" Height ="300" >
< StackPanel Width ="400" Height ="300" Orientation ="Vertical" >
< TextBlock Text ="文件操作" Width ="400" ></ TextBlock >
< Canvas Width ="400" Height ="280" >
< ListBox x:Name ="lstbxFileList" Width ="390" Height ="90" SelectionChanged ="lstbxFileList_SelectionChanged" ></ ListBox >
< TextBlock Text ="文件名:" Margin ="8,100,0,0" ></ TextBlock >
< TextBox x:Name ="txtBxFileName" Width ="300" Margin ="60,100,0,0" ></ TextBox >
< TextBlock Text ="文件内容:" Margin ="8,130,0,0" ></ TextBlock >
< TextBox x:Name ="txtBxFileContent" Width ="300" Margin ="60,130,0,0" Height ="50" ></ TextBox >
< Button x:Name ="btnGetFile" Content ="获取根目录下文件名列表" Margin ="20,190,0,0" Click ="btnGetFile_Click" ></ Button >
< Button x:Name ="btnExistFile" Content ="判断文件是否存在" Margin ="200,190,0,0" Click ="btnExistFile_Click" ></ Button >
< Button x:Name ="btnCreateFile" Content ="在根目录创建文件 " Margin ="20,215,0,0" Click ="btnCreateFile_Click" ></ Button >
< Button x:Name ="btnDelFile" Content ="删除根目录下指定文件 " Margin ="200,215,0,0" Click ="btnDelFile_Click" ></ Button >
< TextBlock x:Name ="tbFileMsg" Text ="操作结果:" Margin ="8,260,0,0" Foreground ="Red" ></ TextBlock >
</ Canvas >
</ StackPanel >
</ StackPanel >
</ Border >
</ StackPanel >
</ Grid >
< TextBlock Text ="Key-Value方式" Foreground ="Blue" FontSize ="18" ></ TextBlock >
< Grid Width ="800" Height ="220" Background ="AntiqueWhite" >
< Grid.ColumnDefinitions >
< ColumnDefinition ></ ColumnDefinition >
< ColumnDefinition ></ ColumnDefinition >
< ColumnDefinition ></ ColumnDefinition >
</ Grid.ColumnDefinitions >
< Canvas Grid.Column ="0" Width ="200" Height ="200" >
< TextBlock Text ="键" Margin ="20,2,0,0" ></ TextBlock >
< TextBlock Text ="值" Margin ="120,2,0,0" ></ TextBlock >
< ListBox x:Name ="lstBxKey" Width ="100" Height ="150" Margin ="-20,20,0,0" ></ ListBox >
< ListBox x:Name ="lstBxValue" Width ="150" Height ="150" Margin ="90,20,0,0" ></ ListBox >
< TextBlock x:Name ="tbKvMsg" Foreground ="red" Text ="操作结果" Margin ="0,170,0,0" FontSize ="16" ></ TextBlock >
</ Canvas >
< StackPanel Width ="200" Grid.Column ="1" Orientation ="Vertical" >
< TextBlock Text ="操作 '字符串键值对'" Foreground ="Green" FontSize ="16" ></ TextBlock >
< Button x:Name ="btnAddstr" Content ="添加预定义键值对" Margin ="8" Click ="btnAddstr_Click" ></ Button >
< TextBlock Text ="输入键名" ></ TextBlock >
< TextBox x:Name ="txtBxKeyName" ></ TextBox >
< Button x:Name ="btnRetrievestrValue" Content ="根据键名查找键值" Margin ="8" Click ="btnRetrievestrValue_Click" ></ Button >
< Button x:Name ="btnDelKV" Content ="移除指定的键值对" Margin ="8" Click ="btnDelKV_Click" ></ Button >
</ StackPanel >
< StackPanel Width ="200" Grid.Column ="2" Orientation ="Vertical" >
< TextBlock Text ="操作 '对象类键值对'" Foreground ="Green" FontSize ="16" ></ TextBlock >
< Button x:Name ="btnAddobj" Content ="添加预定义键值对" Margin ="8" Click ="btnAddobj_Click" ></ Button >
< TextBlock Text ="输入键名" ></ TextBlock >
< TextBox x:Name ="txtBxKeyObjName" ></ TextBox >
< Button x:Name ="btnRetrievestrObjValue" Content ="根据键名查找键值" Margin ="8" Click ="btnRetrievestrObjValue_Click" ></ Button >
< Button x:Name ="btnDelKVobj" Content ="移除指定的键值对" Margin ="8" Click ="btnDelKVobj_Click" ></ Button >
< RadioButton x:Name ="rdbSiteSetting" Content ="按siteSetting查找" GroupName ="gnSearch" ></ RadioButton >
< RadioButton x:Name ="rdbAppSetting" Content ="按appSetting查找" GroupName ="gnSearch" IsChecked ="True" ></ RadioButton >
</ StackPanel >
</ Grid >
< StackPanel >
< Button x:Name ="btnIncreaseSpace" Content ="增加独立存储的配额" Width ="200" Height ="25" Background ="Red" Click ="btnIncreaseSpace_Click" ></ Button >
</ StackPanel >
</ StackPanel >
</ UserControl >
程序共分为三个大区,分别是:
A、文件操作方式(分为:目录操作,文件操作)
B、键值对操作方式 (分为:字符串键值对,类对象键值对)
C、修改存储配额
一、文件操作
(一)、目录操作
我们需要在文本输入框内输入目录名才可进行相关的查找、遍历、增加、删除等操作,目录输入框分为:根目录输入框,子目录输入框。
1、获取根目录下第一级目录列表
操作方法:直接点击"获取根目录下第一级目录列表"按钮,可以看到,当前根目录下没有任何子目录。
代码如下:
#region 获取根目录下第一级目录列表
private void btnGetDir_Click(object sender, RoutedEventArgs e)
{
this.lstbxDirList.Items.Clear(); //首先清空列表框
foreach (string directoryName in isf.GetDirectoryNames())
{
this.lstbxDirList.Items.Add(directoryName);
}
}
#endregion
2、在根目录下创建第一级目录
操作方法:在"一级目录名"输入框内输入一级目录名 "R1",然后再点击"获取根目录下第一级目录列表"按钮,然后可以看到根目录下多了一个名为"R1"的子目录。
我们可以再以此方法建立名为"R2"和"R3"的二个子目录
代码如下:
#region 在根目录下创建第一级目录
private void btnCreateDir_Click( object sender, RoutedEventArgs e)
{
string Dirstr = this .txtBxDirName.Text.ToString(); // 取得目录名
if ( ! isf.DirectoryExists(Dirstr)) // 判断目录是否存在
{
try
{
isf.CreateDirectory(Dirstr); // 如果目录不存在,则创建
this .tbDirMsg.Text = string .Format( " 目录: {0} 创建成功! " , Dirstr);
}
catch (Exception ex)
{
this .tbDirMsg.Text = ex.ToString();
}
}
else
{
this .tbDirMsg.Text = string .Format( " 目录: {0} 已存在! " , Dirstr);
}
// 刷新目录列表
this .lstbxDirList.Items.Clear(); // 首先清空列表框
foreach ( string directoryName in isf.GetDirectoryNames())
{
this .lstbxDirList.Items.Add(directoryName);
}
}
#endregion
3、删除指定第一级目录
操作方法:在"一级目录名"输入框内输入一级目录名 "R3",然后再点击"删除指定第一级目录"按钮,然后可以看到根目录下"R3"子目录不再存在
删除前
删除后
代码如下:
#region 删除指定第一级目录
private void btnDelDir_Click( object sender, RoutedEventArgs e)
{
string Dirstr = this .txtBxDirName.Text.ToString(); // 取得目录名
if (Dirstr.Trim() != "" )
{
if ( ! isf.DirectoryExists(Dirstr)) // 判断目录是否存在
{
this .tbDirMsg.Text = string .Format( " 目录: {0} 不存在! " , Dirstr);
}
else
{
try
{
isf.DeleteDirectory(Dirstr); // 如果目录存在,则删除
this .tbDirMsg.Text = string .Format( " 目录: {0} 成功删除! " , Dirstr);
}
catch (IsolatedStorageException ex)
{
// IsolatedStorageException - 操作临时存储失败时抛出的异常
this .tbDirMsg.Text = ex.ToString();
}
}
}
else
{
this .tbDirMsg.Text = string .Format( " 请输入一级目录名! " , Dirstr);
}
// 刷新目录列表
this .lstbxDirList.Items.Clear(); // 首先清空列表框
foreach ( string directoryName in isf.GetDirectoryNames())
{
this .lstbxDirList.Items.Add(directoryName);
}
}
#endregion
4、判断指定一级目录是否存在
操作方法:在"一级目录名"输入框内输入一级目录名,然后再点击"判断指定一级目录是否存在"按钮,然后在下面的信息提示栏可以看到判断结果
代码如下:
#region 判断指定一级目录是否存在
private void btnExistDir_Click( object sender, RoutedEventArgs e)
{
string Dirstr = this .txtBxDirName.Text.ToString(); // 取得目录名
if (isf.DirectoryExists(Dirstr))
{
this .tbDirMsg.Text = string .Format( " 目录: {0} 已存在! " , Dirstr);
}
else
{
this .tbDirMsg.Text = string .Format( " 目录: {0} 不存在! " , Dirstr);
}
}
#endregion
5、获取指定第一级目录下的子目录列表
操作方法:在"一级目录名"输入框内输入一级目录名"R1",然后再点击"获取指定第一级目录下的子目录列表"按钮,可以看到,在"R1"一级目录下没有任何子目录。
代码如下:
#region 获取指定第一级目录下的子目录列表
private void btnGetSubDir_Click( object sender, RoutedEventArgs e)
{
this .lstbxDirList.Items.Clear(); // 首先清空列表框
string Dirstr = this .txtBxDirName.Text.ToString(); // 取得根目录名
string subDirectory = System.IO.Path.Combine(Dirstr, " * " ); // 搜索指定目录下的所有子目录
foreach ( string directoryName in isf.GetDirectoryNames(subDirectory))
{
this .lstbxDirList.Items.Add(directoryName);
}
}
#endregion
6、在指定第一级目录下创建子目录
操作方法:在"一级目录名"输入框内输入一级目录名"R1",在"子目录名"输入框内输入一子目录名 R1-1,然后再点击"在指定第一级目录下创建子目录"按钮,可以看到,在"R1"一级目录下建立了名为R1-1的子目录。
同样的方法,建立"R1-2","R1-3"等子目录
代码如下:
#region 在指定第一级目录下创建子目录
private void btnCreateSubDir_Click( object sender, RoutedEventArgs e)
{
string Dirstr = this .txtBxDirName.Text.ToString(); // 取得根目录名
string SubDirstr = this .txtBxSubDirName.Text.ToString(); // 取得子目录名
string subDirectory = System.IO.Path.Combine(Dirstr, SubDirstr); // 根据"根目录框"和"子目录框"的文本组合成子目录字符串
if ( ! isf.DirectoryExists(subDirectory)) // 判断目录是否存在
{
try
{
isf.CreateDirectory(subDirectory); // 如果目录不存在,则创建
this .tbDirMsg.Text = string .Format( " 目录: {0} 创建成功! " , subDirectory);
}
catch (Exception ex)
{
this .tbDirMsg.Text = ex.ToString();
}
}
else
{
this .tbDirMsg.Text = string .Format( " 目录: {0} 已存在! " , subDirectory);
}
// 刷新目录列表
this .lstbxDirList.Items.Clear(); // 首先清空列表框
foreach ( string directoryName in isf.GetDirectoryNames(System.IO.Path.Combine(Dirstr, " * " )))
{
this .lstbxDirList.Items.Add(directoryName);
}
}
#endregion
7、删除指定第一级目录下的指定子目录
操作方法:在"一级目录名"输入框内输入一级目录名"R1",在"子目录名"输入框内输入一子目录名 "R1-3",然后再点击"删除指定第一级目录下的指定子目录"按钮,可以看到。子目录"R1-3"已经被删除
代码如下:
#region 删除指定第一级目录下的指定子目录
private void btnDelSubDir_Click( object sender, RoutedEventArgs e)
{
string Dirstr = this .txtBxDirName.Text.ToString(); // 取得目录名
string SubDirstr = this .txtBxSubDirName.Text.ToString();
string subDirectory = System.IO.Path.Combine(Dirstr, SubDirstr); // 搜索指定目录下的所有子目录
if (Dirstr.Trim() != "" || SubDirstr.Trim() != "" )
{
if ( ! isf.DirectoryExists(subDirectory)) // 判断目录是否存在
{
this .tbDirMsg.Text = string .Format( " 目录: {0} 不存在! " , subDirectory);
}
else
{
try
{
isf.DeleteDirectory(subDirectory); // 如果目录存在,则删除
this .tbDirMsg.Text = string .Format( " 目录: {0} 成功删除! " , subDirectory);
}
catch (Exception ex)
{
this .tbDirMsg.Text = ex.ToString();
}
}
}
else
{
this .tbDirMsg.Text = string .Format( " 请在两个目录输入框中输入目录名! " , Dirstr);
}
// 刷新目录列表
this .lstbxDirList.Items.Clear(); // 首先清空列表框
try
{
foreach ( string directoryName in isf.GetDirectoryNames(System.IO.Path.Combine(Dirstr, " * " )))
{
this .lstbxDirList.Items.Add(directoryName);
}
}
catch (IsolatedStorageException ex)
{
// IsolatedStorageException - 操作临时存储失败时抛出的异常
this .tbDirMsg.Text = ex.ToString();
}
}
#endregion
8、判断指定子目录是否存在
操作方法:在"一级目录名"输入框内输入一级目录名"R1",在"子目录名"输入框内输入一子目录名 ,然后再点击"判断指定子目录是否存在"按钮,可以看到判断结果
(二)、文件操作
我们只涉及在根目录下进行文件的操作,如果要涉及到子目录下文件操作可以参见上面提及的"目录操作"来配合进行。
1、获取根目录下文件名列表
操作方法:直接点击"获取根目录下文件名列表"按钮,可以看到当前根目录下没有任何文件。
代码如下:
#region 获取根目录下文件名列表
private void btnGetFile_Click( object sender, RoutedEventArgs e)
{
foreach ( string fileName in isf.GetFileNames())
{
this .lstbxFileList.Items.Add(fileName);
}
}
#endregion
2、在根目录创建文件
操作方法:在"文件名"输入框内输入文件名"F1",在文件内容输入框内输入任何文件内容,然后点击"在根目录创建文件"按钮,可以看到文件创建成功。用同样的方法创建文件F2,F3,F4
代码如下:
#region 在根目录创建文件
private void btnCreateFile_Click( object sender, RoutedEventArgs e)
{
string fileNameStr = this .txtBxFileName.Text.ToString(); // 获取文件名
string fileContent = this .txtBxFileContent.Text.ToString(); // 获取文件内容
// 如果文件不存在,则在根目录下新创建
if ( ! isf.FileExists(fileNameStr))
{ // 判断文件是否存在,如果不存在则创建它
IsolatedStorageFileStream isfs = isf.CreateFile(fileNameStr);
isfs.Close();
}
// 修改文件的内容
try
{
if (isf.FileExists(fileNameStr))
{
// 如果文件存在,则在在文件中写入内容
IsolatedStorageFileStream streamWrite = isf.OpenFile(fileNameStr, System.IO.FileMode.Open, System.IO.FileAccess.Write);
using (System.IO.StreamWriter sw = new System.IO.StreamWriter(streamWrite))
{
sw.WriteLine(fileContent);
}
this .tbFileMsg.Text = string .Format( " 文件:{0} 创建成功! " , fileNameStr);
// 成功创建文件后,清除输入框内容
this .txtBxFileName.Text = "" ;
this .txtBxFileContent.Text = "" ;
// 重新获取根目录下的文件名列表
this .lstbxFileList.Items.Clear(); // 先清除显示
foreach ( string fileName in isf.GetFileNames())
{
this .lstbxFileList.Items.Add(fileName);
}
}
}
catch (Exception ex)
{
this .tbFileMsg.Text = ex.ToString();
}
}
#endregion
3、判断文件是否存在
操作方法:在"文件名"输入框内输入文件名"F1",然后直接点击"判断文件是否存在"按钮,可以看到判断结果为存在。
代码如下:
#region 判断文件是否存在
private void btnExistFile_Click( object sender, RoutedEventArgs e)
{
string fileNameStr = this .txtBxFileName.Text.ToString(); // 取得输入的文件名
if (isf.FileExists(fileNameStr))
{
this .tbFileMsg.Text = string .Format( " 文件:{0} 已存在! " , fileNameStr);
}
else
{
this .tbFileMsg.Text = string .Format( " 文件:{0} 不存在! " , fileNameStr);
}
}
#endregion
4、删除根目录下指定文件
操作方法:在"文件名"输入框内输入文件名"F4",然后直接点击"删除根目录下指定文件
"按钮,结果是直接删除指定文件F4
代码如下:
#region 删除根目录下指定文件
private void btnDelFile_Click( object sender, RoutedEventArgs e)
{
string fileNameStr = this .txtBxFileName.Text.ToString(); // 取得输入的文件名
if (isf.FileExists(fileNameStr))
{ // 如果文件存在,则删除之
try
{
isf.DeleteFile(fileNameStr);
this .tbFileMsg.Text = string .Format( " 文件:{0} 删除成功! " , fileNameStr);
// 成功删除文件后,清除输入框内容
this .txtBxFileName.Text = "" ;
this .txtBxFileContent.Text = "" ;
// 重新获取根目录下的文件名列表
this .lstbxFileList.Items.Clear(); // 先清除显示
foreach ( string fileName in isf.GetFileNames())
{
this .lstbxFileList.Items.Add(fileName);
}
}
catch (Exception ex)
{
this .tbFileMsg.Text = ex.ToString();
}
}
else
{
this .tbFileMsg.Text = string .Format( " 文件:{0} 不存在! " , fileNameStr);
}
}
#endregion
5、装载选择的文件
操作方法:直接点击最上面的"文件名列表",点击后将直接把文件名和文件内容显示在下面对应的文本输入框内。
代码如下:
#region 从文件名列表选择并装载文件
private void lstbxFileList_SelectionChanged( object sender, SelectionChangedEventArgs e)
{
try
{
string fileNameStr = this .lstbxFileList.SelectedItem.ToString(); // 取得文件名
// 读取所选文件的内容和文件名并显示在对应的文本框
// 先清空显示
this .txtBxFileName.Text = "" ;
this .txtBxFileContent.Text = "" ;
IsolatedStorageFileStream streamRead = isf.OpenFile(fileNameStr, System.IO.FileMode.Open, System.IO.FileAccess.Read);
using (System.IO.StreamReader sr = new System.IO.StreamReader(streamRead))
{
this .txtBxFileName.Text = fileNameStr; // 显示文件名
this .txtBxFileContent.Text += sr.ReadToEnd(); // 显示文件内容
}
}
catch { }
}
#endregion
二、键值对操作方式
我们编写了两套代码,一套是针对“字符串”型键值对,一套是针对"类对象"型键值对。
在程序上的操作完全相同,只是后台代码有所区别。
1、添加预定义的键值对
为操作类对象键值对,我们需要添加一个类名为Car,代码如下:
using System;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Ink;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
namespace MyIsolateSL
{
public class Car
{
public string CarName{ get ; set ;}
public int CarDoor{ get ; set ;}
public Car()
{
}
public Car( string CarNamestr, int CarDoorInt)
{
CarName = CarNamestr;
CarDoor = CarDoorInt ;
}
}
}
操作方法:直接点击"添加预定义的键值对"按钮,我们在代码内置初始化了一些对应的键值对值,装载后,它们对应的Key和Value将分别显示在对应的ListBox控件内。
代码如下:
#region 添加键值对(键值为字符串)
private void btnAddstr_Click( object sender, RoutedEventArgs e)
{
try
{
// 先清空以前的键值对记录
appSettings.Clear();
siteSettings.Clear();
appSettings.Add( " China " , " ChengDu " );
appSettings.Add( " America " , " Washington " );
appSettings.Add( " Australia " , " Sydney " );
appSettings.Add( " Canada " , " Breton " );
siteSettings.Add( " Car1 " , " Camery " );
siteSettings.Add( " Car2 " , " Corrola " );
siteSettings.Add( " Car3 " , " Ford " );
siteSettings.Add( " Car4 " , " Syris " );
ShowKV();
}
catch (IsolatedStorageException ex)
{
this .tbKvMsg.Text = ex.ToString();
}
ShowKV();
}
#endregion
#region 添加键值对(键值为类对象)
private void btnAddobj_Click( object sender, RoutedEventArgs e)
{
try
{
// 先清空以前的键值对记录
appSettings.Clear();
siteSettings.Clear();
appSettings.Add( " Jack " , new Car( " BWM " , 4 ));
appSettings.Add( " Joe " , new Car( " Benz " , 5 ));
appSettings.Add( " Tom " , new Car( " Ford " , 4 ));
appSettings.Add( " Elle " , new Car( " Holden " , 5 ));
siteSettings.Add( " Hugen " , new Car( " QQ " , 4 ));
siteSettings.Add( " Susie " , new Car( " Audi " , 5 ));
siteSettings.Add( " Tom " , new Car( " Corolla " , 4 ));
siteSettings.Add( " Elle " , new Car( " Carmery " , 5 ));
ShowKVobjs();
}
catch (IsolatedStorageException ex)
{
this .tbKvMsg.Text = ex.ToString();
}
}
#endregion
2、根据键名查找键值
操作方法:在"输入鍵名"文本框内输入任何键名,然后选择此键对应的appsetting,或siteSetting选项(见右下角的单选按钮),然后点击"根据键名查找键值"按钮,可以看到定位结果,在下面红色的结果文本栏直接显示查找到的键值,如果没找到将显示相关提示。
代码如下:
#region 根据键名取得键值(键值为字符串)
private void btnRetrievestrValue_Click( object sender, RoutedEventArgs e)
{
string keyNameStr = this .txtBxKeyName.Text.ToString().Trim(); // 取得键名
if (keyNameStr != "" )
{
if ( this .rdbAppSetting.IsChecked == true )
{
if (appSettings.Contains(keyNameStr))
{
try
{
this .tbKvMsg.Text = appSettings[keyNameStr].ToString(); // 根据键名取得键值
}
catch (IsolatedStorageException ex)
{
this .tbKvMsg.Text = ex.ToString();
}
}
else
{
this .tbKvMsg.Text = " 不包含指定的键值对! " ;
}
}
if ( this .rdbSiteSetting.IsChecked == true )
{
if ( this .siteSettings.Contains(keyNameStr))
{
try
{
this .tbKvMsg.Text = siteSettings[keyNameStr].ToString(); // 根据键名取得键值
}
catch (IsolatedStorageException ex)
{
this .tbKvMsg.Text = ex.ToString();
}
}
else
{
this .tbKvMsg.Text = " 不包含指定的键值对! " ;
}
}
}
}
#endregion
3、移除指定的键值对
操作方法:在"输入鍵名"文本框内输入任何键名,然后选择此键对应的appsetting,或siteSetting选项(见右下角的单选按钮),然后点击"移除指定的键值对"按钮,在下面红色的结果文本栏直接显示删除执行结果。
代码如下:
#region 移除指定的键值对(键值为字符串)
private void btnDelKV_Click( object sender, RoutedEventArgs e)
{
string keyNameStr = this .txtBxKeyName.Text.ToString().Trim(); // 取得键名
if (keyNameStr != "" )
{
if ( this .rdbAppSetting.IsChecked == true )
{
if (appSettings.Contains(keyNameStr))
{
try
{
appSettings.Remove(keyNameStr); // 移除指定的键值对
this .tbKvMsg.Text = " 移除成功! " ;
}
catch (IsolatedStorageException ex)
{
this .tbKvMsg.Text = ex.ToString();
}
}
else
{
this .tbKvMsg.Text = " 不包含指定的键值对! " ;
}
}
if ( this .rdbSiteSetting.IsChecked == true )
{
if ( this .siteSettings.Contains(keyNameStr))
{
try
{
siteSettings.Remove(keyNameStr); // 移除指定的键值对
this .tbKvMsg.Text = " 移除成功! " ;
}
catch (IsolatedStorageException ex)
{
this .tbKvMsg.Text = ex.ToString();
}
}
else
{
this .tbKvMsg.Text = " 不包含指定的键值对! " ;
}
}
ShowKV(); // 重新显示最新结果
}
}
#endregion
#region 移除指定的键值对(键值为类对象)
private void btnDelKVobj_Click( object sender, RoutedEventArgs e)
{
string keyNameStr = this .txtBxKeyObjName.Text.ToString().Trim(); // 取得键名
if (keyNameStr != "" )
{
if ( this .rdbAppSetting.IsChecked == true )
{
if (appSettings.Contains(keyNameStr))
{
appSettings.Remove(keyNameStr); // 移除指定的键值对
this .tbKvMsg.Text = " 移除成功! " ;
}
else
{
this .tbKvMsg.Text = " 不包含指定的键值对! " ;
}
}
if ( this .rdbSiteSetting.IsChecked == true )
{
if (siteSettings.Contains(keyNameStr))
{
siteSettings.Remove(keyNameStr); // 移除指定的键值对
this .tbKvMsg.Text = " 移除成功! " ;
}
else
{
this .tbKvMsg.Text = " 不包含指定的键值对! " ;
}
}
ShowKVobjs(); // 重新显示最新结果
}
}
#endregion
三、修改存储配额
Isolated Storage技术就是让你的Silverlight程序可以在用户的硬盘上创建文件,存储数据。管理员能给每个用户单独设定磁盘配额,也就是说,不能保证肯定有足够的空间。因此,我们可以通过编码来动态增加磁盘配额,但是否允许增加还得用户说了算,这种交互是通过跳出一个询问框来进行的。
点击"修改存储配额"按钮后,将跳出以下对话框:
代码如下 :
#region 增加独立存储的配额
private void btnIncreaseSpace_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));
}
}
#endregion
Page.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; // 添加进行IsolatedStorage操作的命名空间
namespace MyIsolateSL
{
public partial class Page : UserControl
{
取得要进行IsolatedStorage相关操作的类对象 #region 取得要进行IsolatedStorage相关操作的类对象
// IsolatedStorageFile - 操作 独立存储 的类
// IsolatedStorageFile.GetUserStoreForSite() - 按站点获取用户的独立存储
// IsolatedStorageFile.GetUserStoreForApplication() - 按应用程序获取用户的独立存储
IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication(); // - 按应用程序获取用户的独立存储
// IsolatedStorageSettings - 在独立存储中保存的 key-value 字典表
// IsolatedStorageSettings.SiteSettings - 按站点保存的 key-value 字典表
// IsolatedStorageSettings.ApplicationSettings - 按应用程序保存的 key-value 字典表
IsolatedStorageSettings appSettings = IsolatedStorageSettings.ApplicationSettings;
IsolatedStorageSettings siteSettings = IsolatedStorageSettings.SiteSettings;
#endregion
public Page()
{
InitializeComponent();
}
文件操作方式 #region 文件操作方式
目录操作 #region 目录操作
获取根目录下第一级目录列表 #region 获取根目录下第一级目录列表
private void btnGetDir_Click( object sender, RoutedEventArgs e)
{
this .lstbxDirList.Items.Clear(); // 首先清空列表框
foreach ( string directoryName in isf.GetDirectoryNames())
{
this .lstbxDirList.Items.Add(directoryName);
}
}
#endregion
获取指定第一级目录下的子目录列表 #region 获取指定第一级目录下的子目录列表
private void btnGetSubDir_Click( object sender, RoutedEventArgs e)
{
this .lstbxDirList.Items.Clear(); // 首先清空列表框
string Dirstr = this .txtBxDirName.Text.ToString(); // 取得根目录名
string subDirectory = System.IO.Path.Combine(Dirstr, " * " ); // 搜索指定目录下的所有子目录
foreach ( string directoryName in isf.GetDirectoryNames(subDirectory))
{
this .lstbxDirList.Items.Add(directoryName);
}
}
#endregion
判断指定一级目录是否存在 #region 判断指定一级目录是否存在
private void btnExistDir_Click( object sender, RoutedEventArgs e)
{
string Dirstr = this .txtBxDirName.Text.ToString(); // 取得目录名
if (isf.DirectoryExists(Dirstr))
{
this .tbDirMsg.Text = string .Format( " 目录: {0} 已存在! " , Dirstr);
}
else
{
this .tbDirMsg.Text = string .Format( " 目录: {0} 不存在! " , Dirstr);
}
}
#endregion
判断指定子目录是否存在 #region 判断指定子目录是否存在
private void btnExistSubDir_Click( object sender, RoutedEventArgs e)
{
string Dirstr = this .txtBxDirName.Text.ToString(); // 取得目录名
string SubDirstr = this .txtBxSubDirName.Text.ToString();
string subDirectory = System.IO.Path.Combine(Dirstr, SubDirstr); // 搜索指定目录下的所有子目录
if (isf.DirectoryExists(subDirectory))
{
this .tbDirMsg.Text = string .Format( " 目录: {0} 已存在! " , subDirectory);
}
else
{
this .tbDirMsg.Text = string .Format( " 目录: {0} 不存在! " , subDirectory);
}
}
#endregion
在根目录下创建第一级目录 #region 在根目录下创建第一级目录
private void btnCreateDir_Click( object sender, RoutedEventArgs e)
{
string Dirstr = this .txtBxDirName.Text.ToString(); // 取得目录名
if ( ! isf.DirectoryExists(Dirstr)) // 判断目录是否存在
{
try
{
isf.CreateDirectory(Dirstr); // 如果目录不存在,则创建
this .tbDirMsg.Text = string .Format( " 目录: {0} 创建成功! " , Dirstr);
}
catch (Exception ex)
{
this .tbDirMsg.Text = ex.ToString();
}
}
else
{
this .tbDirMsg.Text = string .Format( " 目录: {0} 已存在! " , Dirstr);
}
// 刷新目录列表
this .lstbxDirList.Items.Clear(); // 首先清空列表框
foreach ( string directoryName in isf.GetDirectoryNames())
{
this .lstbxDirList.Items.Add(directoryName);
}
}
#endregion
在指定第一级目录下创建子目录 #region 在指定第一级目录下创建子目录
private void btnCreateSubDir_Click( object sender, RoutedEventArgs e)
{
string Dirstr = this .txtBxDirName.Text.ToString(); // 取得根目录名
string SubDirstr = this .txtBxSubDirName.Text.ToString(); // 取得子目录名
string subDirectory = System.IO.Path.Combine(Dirstr, SubDirstr); // 根据"根目录框"和"子目录框"的文本组合成子目录字符串
if ( ! isf.DirectoryExists(subDirectory)) // 判断目录是否存在
{
try
{
isf.CreateDirectory(subDirectory); // 如果目录不存在,则创建
this .tbDirMsg.Text = string .Format( " 目录: {0} 创建成功! " , subDirectory);
}
catch (Exception ex)
{
this .tbDirMsg.Text = ex.ToString();
}
}
else
{
this .tbDirMsg.Text = string .Format( " 目录: {0} 已存在! " , subDirectory);
}
// 刷新目录列表
this .lstbxDirList.Items.Clear(); // 首先清空列表框
foreach ( string directoryName in isf.GetDirectoryNames(System.IO.Path.Combine(Dirstr, " * " )))
{
this .lstbxDirList.Items.Add(directoryName);
}
}
#endregion
删除指定第一级目录 #region 删除指定第一级目录
private void btnDelDir_Click( object sender, RoutedEventArgs e)
{
string Dirstr = this .txtBxDirName.Text.ToString(); // 取得目录名
if (Dirstr.Trim() != "" )
{
if ( ! isf.DirectoryExists(Dirstr)) // 判断目录是否存在
{
this .tbDirMsg.Text = string .Format( " 目录: {0} 不存在! " , Dirstr);
}
else
{
try
{
isf.DeleteDirectory(Dirstr); // 如果目录存在,则删除
this .tbDirMsg.Text = string .Format( " 目录: {0} 成功删除! " , Dirstr);
}
catch (IsolatedStorageException ex)
{
// IsolatedStorageException - 操作临时存储失败时抛出的异常
this .tbDirMsg.Text = ex.ToString();
}
}
}
else
{
this .tbDirMsg.Text = string .Format( " 请输入一级目录名! " , Dirstr);
}
// 刷新目录列表
this .lstbxDirList.Items.Clear(); // 首先清空列表框
foreach ( string directoryName in isf.GetDirectoryNames())
{
this .lstbxDirList.Items.Add(directoryName);
}
}
#endregion
删除指定第一级目录下的指定子目录 #region 删除指定第一级目录下的指定子目录
private void btnDelSubDir_Click( object sender, RoutedEventArgs e)
{
string Dirstr = this .txtBxDirName.Text.ToString(); // 取得目录名
string SubDirstr = this .txtBxSubDirName.Text.ToString();
string subDirectory = System.IO.Path.Combine(Dirstr, SubDirstr); // 搜索指定目录下的所有子目录
if (Dirstr.Trim() != "" || SubDirstr.Trim() != "" )
{
if ( ! isf.DirectoryExists(subDirectory)) // 判断目录是否存在
{
this .tbDirMsg.Text = string .Format( " 目录: {0} 不存在! " , subDirectory);
}
else
{
try
{
isf.DeleteDirectory(subDirectory); // 如果目录存在,则删除
this .tbDirMsg.Text = string .Format( " 目录: {0} 成功删除! " , subDirectory);
}
catch (Exception ex)
{
this .tbDirMsg.Text = ex.ToString();
}
}
}
else
{
this .tbDirMsg.Text = string .Format( " 请在两个目录输入框中输入目录名! " , Dirstr);
}
// 刷新目录列表
this .lstbxDirList.Items.Clear(); // 首先清空列表框
try
{
foreach ( string directoryName in isf.GetDirectoryNames(System.IO.Path.Combine(Dirstr, " * " )))
{
this .lstbxDirList.Items.Add(directoryName);
}
}
catch (IsolatedStorageException ex)
{
// IsolatedStorageException - 操作临时存储失败时抛出的异常
this .tbDirMsg.Text = ex.ToString();
}
}
#endregion
清空目录列表 #region 清空目录列表
private void btnClearDirList_Click( object sender, RoutedEventArgs e)
{
this .lstbxDirList.Items.Clear();
}
#endregion
#endregion
文件操作 #region 文件操作
获取根目录下文件名列表 #region 获取根目录下文件名列表
private void btnGetFile_Click( object sender, RoutedEventArgs e)
{
foreach ( string fileName in isf.GetFileNames())
{
this .lstbxFileList.Items.Add(fileName);
}
}
#endregion
在根目录创建文件 #region 在根目录创建文件
private void btnCreateFile_Click( object sender, RoutedEventArgs e)
{
string fileNameStr = this .txtBxFileName.Text.ToString(); // 获取文件名
string fileContent = this .txtBxFileContent.Text.ToString(); // 获取文件内容
// 如果文件不存在,则在根目录下新创建
if ( ! isf.FileExists(fileNameStr))
{ // 判断文件是否存在,如果不存在则创建它
IsolatedStorageFileStream isfs = isf.CreateFile(fileNameStr);
isfs.Close();
}
// 修改文件的内容
try
{
if (isf.FileExists(fileNameStr))
{
// 如果文件存在,则在在文件中写入内容
IsolatedStorageFileStream streamWrite = isf.OpenFile(fileNameStr, System.IO.FileMode.Open, System.IO.FileAccess.Write);
using (System.IO.StreamWriter sw = new System.IO.StreamWriter(streamWrite))
{
sw.WriteLine(fileContent);
}
this .tbFileMsg.Text = string .Format( " 文件:{0} 创建成功! " , fileNameStr);
// 成功创建文件后,清除输入框内容
this .txtBxFileName.Text = "" ;
this .txtBxFileContent.Text = "" ;
// 重新获取根目录下的文件名列表
this .lstbxFileList.Items.Clear(); // 先清除显示
foreach ( string fileName in isf.GetFileNames())
{
this .lstbxFileList.Items.Add(fileName);
}
}
}
catch (Exception ex)
{
this .tbFileMsg.Text = ex.ToString();
}
}
#endregion
判断文件是否存在 #region 判断文件是否存在
private void btnExistFile_Click( object sender, RoutedEventArgs e)
{
string fileNameStr = this .txtBxFileName.Text.ToString(); // 取得输入的文件名
if (isf.FileExists(fileNameStr))
{
this .tbFileMsg.Text = string .Format( " 文件:{0} 已存在! " , fileNameStr);
}
else
{
this .tbFileMsg.Text = string .Format( " 文件:{0} 不存在! " , fileNameStr);
}
}
#endregion
删除根目录下指定文件 #region 删除根目录下指定文件
private void btnDelFile_Click( object sender, RoutedEventArgs e)
{
string fileNameStr = this .txtBxFileName.Text.ToString(); // 取得输入的文件名
if (isf.FileExists(fileNameStr))
{ // 如果文件存在,则删除之
try
{
isf.DeleteFile(fileNameStr);
this .tbFileMsg.Text = string .Format( " 文件:{0} 删除成功! " , fileNameStr);
// 成功删除文件后,清除输入框内容
this .txtBxFileName.Text = "" ;
this .txtBxFileContent.Text = "" ;
// 重新获取根目录下的文件名列表
this .lstbxFileList.Items.Clear(); // 先清除显示
foreach ( string fileName in isf.GetFileNames())
{
this .lstbxFileList.Items.Add(fileName);
}
}
catch (Exception ex)
{
this .tbFileMsg.Text = ex.ToString();
}
}
else
{
this .tbFileMsg.Text = string .Format( " 文件:{0} 不存在! " , fileNameStr);
}
}
#endregion
从文件名列表选择并装载文件 #region 从文件名列表选择并装载文件
private void lstbxFileList_SelectionChanged( object sender, SelectionChangedEventArgs e)
{
try
{
string fileNameStr = this .lstbxFileList.SelectedItem.ToString(); // 取得文件名
// 读取所选文件的内容和文件名并显示在对应的文本框
// 先清空显示
this .txtBxFileName.Text = "" ;
this .txtBxFileContent.Text = "" ;
IsolatedStorageFileStream streamRead = isf.OpenFile(fileNameStr, System.IO.FileMode.Open, System.IO.FileAccess.Read);
using (System.IO.StreamReader sr = new System.IO.StreamReader(streamRead))
{
this .txtBxFileName.Text = fileNameStr; // 显示文件名
this .txtBxFileContent.Text += sr.ReadToEnd(); // 显示文件内容
}
}
catch { }
}
#endregion
#endregion
#endregion
字典操作方式 #region 字典操作方式
字符串键值对 #region 字符串键值对
遍历显示键值对(键值为字符串) #region 遍历显示键值对(键值为字符串)
private void ShowKV()
{
// 先清空键,值列表框内的内容
this .lstBxKey.Items.Clear();
this .lstBxValue.Items.Clear();
// 再遍历键值记录显示出来
foreach ( object k in appSettings.Keys)
{
this .lstBxKey.Items.Add(k.ToString());
}
foreach ( object o in appSettings.Values)
{
this .lstBxValue.Items.Add(o.ToString());
}
foreach ( object k in siteSettings.Keys)
{
this .lstBxKey.Items.Add(k.ToString());
}
foreach ( object o in siteSettings.Values)
{
this .lstBxValue.Items.Add(o.ToString());
}
}
#endregion
添加键值对(键值为字符串) #region 添加键值对(键值为字符串)
private void btnAddstr_Click( object sender, RoutedEventArgs e)
{
try
{
// 先清空以前的键值对记录
appSettings.Clear();
siteSettings.Clear();
appSettings.Add( " China " , " ChengDu " );
appSettings.Add( " America " , " Washington " );
appSettings.Add( " Australia " , " Sydney " );
appSettings.Add( " Canada " , " Breton " );
siteSettings.Add( " Car1 " , " Camery " );
siteSettings.Add( " Car2 " , " Corrola " );
siteSettings.Add( " Car3 " , " Ford " );
siteSettings.Add( " Car4 " , " Syris " );
ShowKV();
}
catch (IsolatedStorageException ex)
{
this .tbKvMsg.Text = ex.ToString();
}
ShowKV();
}
#endregion
根据键名取得键值(键值为字符串) #region 根据键名取得键值(键值为字符串)
private void btnRetrievestrValue_Click( object sender, RoutedEventArgs e)
{
string keyNameStr = this .txtBxKeyName.Text.ToString().Trim(); // 取得键名
if (keyNameStr != "" )
{
if ( this .rdbAppSetting.IsChecked == true )
{
if (appSettings.Contains(keyNameStr))
{
try
{
this .tbKvMsg.Text = appSettings[keyNameStr].ToString(); // 根据键名取得键值
}
catch (IsolatedStorageException ex)
{
this .tbKvMsg.Text = ex.ToString();
}
}
else
{
this .tbKvMsg.Text = " 不包含指定的键值对! " ;
}
}
if ( this .rdbSiteSetting.IsChecked == true )
{
if ( this .siteSettings.Contains(keyNameStr))
{
try
{
this .tbKvMsg.Text = siteSettings[keyNameStr].ToString(); // 根据键名取得键值
}
catch (IsolatedStorageException ex)
{
this .tbKvMsg.Text = ex.ToString();
}
}
else
{
this .tbKvMsg.Text = " 不包含指定的键值对! " ;
}
}
}
}
#endregion
移除指定的键值对(键值为字符串) #region 移除指定的键值对(键值为字符串)
private void btnDelKV_Click( object sender, RoutedEventArgs e)
{
string keyNameStr = this .txtBxKeyName.Text.ToString().Trim(); // 取得键名
if (keyNameStr != "" )
{
if ( this .rdbAppSetting.IsChecked == true )
{
if (appSettings.Contains(keyNameStr))
{
try
{
appSettings.Remove(keyNameStr); // 移除指定的键值对
this .tbKvMsg.Text = " 移除成功! " ;
}
catch (IsolatedStorageException ex)
{
this .tbKvMsg.Text = ex.ToString();
}
}
else
{
this .tbKvMsg.Text = " 不包含指定的键值对! " ;
}
}
if ( this .rdbSiteSetting.IsChecked == true )
{
if ( this .siteSettings.Contains(keyNameStr))
{
try
{
siteSettings.Remove(keyNameStr); // 移除指定的键值对
this .tbKvMsg.Text = " 移除成功! " ;
}
catch (IsolatedStorageException ex)
{
this .tbKvMsg.Text = ex.ToString();
}
}
else
{
this .tbKvMsg.Text = " 不包含指定的键值对! " ;
}
}
ShowKV(); // 重新显示最新结果
}
}
#endregion
#endregion
类对象键值对 #region 类对象键值对
遍历显示键值对(键值为类对象) #region 遍历显示键值对(键值为类对象)
private void ShowKVobjs()
{
// 先清空键,值列表框内的内容
this .lstBxKey.Items.Clear();
this .lstBxValue.Items.Clear();
foreach ( object k in appSettings.Keys)
{
this .lstBxKey.Items.Add(k.ToString());
}
foreach ( object o in appSettings.Values)
{
Car mycar = o as Car;
this .lstBxValue.Items.Add( string .Format( " 品牌: {0} {1} 门 " , mycar.CarName, mycar.CarDoor.ToString()));
}
foreach ( object k in siteSettings.Keys)
{
this .lstBxKey.Items.Add(k.ToString());
}
foreach ( object o in siteSettings.Values)
{
Car mycar = o as Car;
this .lstBxValue.Items.Add( string .Format( " 品牌: {0} {1}门 " , mycar.CarName, mycar.CarDoor.ToString()));
}
}
#endregion
添加键值对(键值为类对象) #region 添加键值对(键值为类对象)
private void btnAddobj_Click( object sender, RoutedEventArgs e)
{
try
{
// 先清空以前的键值对记录
appSettings.Clear();
siteSettings.Clear();
appSettings.Add( " Jack " , new Car( " BWM " , 4 ));
appSettings.Add( " Joe " , new Car( " Benz " , 5 ));
appSettings.Add( " Tom " , new Car( " Ford " , 4 ));
appSettings.Add( " Elle " , new Car( " Holden " , 5 ));
siteSettings.Add( " Hugen " , new Car( " QQ " , 4 ));
siteSettings.Add( " Susie " , new Car( " Audi " , 5 ));
siteSettings.Add( " Tom " , new Car( " Corolla " , 4 ));
siteSettings.Add( " Elle " , new Car( " Carmery " , 5 ));
ShowKVobjs();
}
catch (IsolatedStorageException ex)
{
this .tbKvMsg.Text = ex.ToString();
}
}
#endregion
根据键名取得键值(键值为类对象) #region 根据键名取得键值(键值为类对象)
private void btnRetrievestrObjValue_Click( object sender, RoutedEventArgs e)
{
string keyNameStr = this .txtBxKeyObjName.Text.ToString().Trim(); // 取得键名
if (keyNameStr != "" )
{
if ( this .rdbAppSetting.IsChecked == true )
{
if (appSettings.Contains(keyNameStr))
{
Car mycar = appSettings[keyNameStr] as Car; // 根据键名取得键值
this .tbKvMsg.Text = string .Format( " 对应键值是:品牌: {0} {1}门 " , mycar.CarName, mycar.CarDoor.ToString());
}
else
{
this .tbKvMsg.Text = " 不包含指定的键值对! " ;
}
}
if ( this .rdbSiteSetting.IsChecked == true )
{
if (siteSettings.Contains(keyNameStr))
{
Car mycar = siteSettings[keyNameStr] as Car; // 根据键名取得键值
this .tbKvMsg.Text = string .Format( " 对应键值是: 品牌: {0} {1}门 " , mycar.CarName, mycar.CarDoor.ToString());
}
else
{
this .tbKvMsg.Text = " 不包含指定的键值对! " ;
}
}
}
}
#endregion
移除指定的键值对(键值为类对象) #region 移除指定的键值对(键值为类对象)
private void btnDelKVobj_Click( object sender, RoutedEventArgs e)
{
string keyNameStr = this .txtBxKeyObjName.Text.ToString().Trim(); // 取得键名
if (keyNameStr != "" )
{
if ( this .rdbAppSetting.IsChecked == true )
{
if (appSettings.Contains(keyNameStr))
{
appSettings.Remove(keyNameStr); // 移除指定的键值对
this .tbKvMsg.Text = " 移除成功! " ;
}
else
{
this .tbKvMsg.Text = " 不包含指定的键值对! " ;
}
}
if ( this .rdbSiteSetting.IsChecked == true )
{
if (siteSettings.Contains(keyNameStr))
{
siteSettings.Remove(keyNameStr); // 移除指定的键值对
this .tbKvMsg.Text = " 移除成功! " ;
}
else
{
this .tbKvMsg.Text = " 不包含指定的键值对! " ;
}
}
ShowKVobjs(); // 重新显示最新结果
}
}
#endregion
#endregion
#endregion
增加独立存储的配额 #region 增加独立存储的配额
private void btnIncreaseSpace_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));
}
}
#endregion
}
}
代码总结:
http://www.cnblogs.com/wsdj-ITtech/archive/2009/07/31/1535788.html