SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇)

SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇)

  在"SilverLight学习笔记--进一步学习Isolated Storage独立存储一(理论篇)"中,我们对Isolated Storage独立存储相关概念进行了清理,在本篇,我们一起通过建立一个实例来看看Isolated Storage独立存储常见的相关操作。       
  首先我们在VS2008下新建立一个Silverligth应用程序,程序名命名为:MyIsolateSL.
  SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇) _第1张图片
编辑Page.xaml文件,建立程序用户界面,如图
SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇) _第2张图片
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"的子目录。
SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇) _第3张图片
  我们可以再以此方法建立名为"R2"和"R3"的二个子目录
SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇) _第4张图片
代码如下:

代码
   
   
#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"子目录不再存在
     删除前
SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇) _第5张图片
   删除后
SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇) _第6张图片
代码如下:

代码
   
   
#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、判断指定一级目录是否存在
     操作方法:在"一级目录名"输入框内输入一级目录名,然后再点击"判断指定一级目录是否存在"按钮,然后在下面的信息提示栏可以看到判断结果
SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇) _第7张图片
 代码如下:

代码
   
   
#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的子目录。
SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇) _第8张图片
 同样的方法,建立"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"已经被删除
SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇) _第9张图片
 代码如下:

代码
   
   
#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",在"子目录名"输入框内输入一子目录名 ,然后再点击"判断指定子目录是否存在"按钮,可以看到判断结果

SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇) _第10张图片

(二)、文件操作
    我们只涉及在根目录下进行文件的操作,如果要涉及到子目录下文件操作可以参见上面提及的"目录操作"来配合进行。
    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
SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇) _第11张图片
代码如下:

代码
   
   
#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",然后直接点击"判断文件是否存在"按钮,可以看到判断结果为存在。
SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇) _第12张图片
代码如下:

 

代码
   
   
#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
SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇) _第13张图片
代码如下:

代码
   
   
#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、装载选择的文件
      操作方法:直接点击最上面的"文件名列表",点击后将直接把文件名和文件内容显示在下面对应的文本输入框内。
SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇) _第14张图片
代码如下:

 

代码
   
   
#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控件内。

   SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇) _第15张图片
SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇) _第16张图片
代码如下:

 

代码
   
   
#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选项(见右下角的单选按钮),然后点击"根据键名查找键值"按钮,可以看到定位结果,在下面红色的结果文本栏直接显示查找到的键值,如果没找到将显示相关提示。
  SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇) _第17张图片
SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇) _第18张图片
代码如下:

 

代码
   
   
#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选项(见右下角的单选按钮),然后点击"移除指定的键值对"按钮,在下面红色的结果文本栏直接显示删除执行结果。
SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇) _第19张图片

SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇) _第20张图片
 代码如下:

代码
   
   
#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程序可以在用户的硬盘上创建文件,存储数据。管理员能给每个用户单独设定磁盘配额,也就是说,不能保证肯定有足够的空间。因此,我们可以通过编码来动态增加磁盘配额,但是否允许增加还得用户说了算,这种交互是通过跳出一个询问框来进行的。
    点击"修改存储配额"按钮后,将跳出以下对话框:
SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇) _第21张图片
 代码如下 :

代码
   
   
#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




}
}

代码总结:

  涉及Isolated Storage独立存储操作的类有:
  
1 、IsolatedStorageFile  -  操作 独立存储 的类
        IsolatedStorageFile.GetUserStoreForSite() 
-  按站点获取用户的独立存储
        IsolatedStorageFile.GetUserStoreForApplication() 
-  按应用程序获取用户的独立存储
  
2 、IsolatedStorageSettings  -  在独立存储中保存的 key - value 字典表
        IsolatedStorageSettings.SiteSettings 
-  按站点保存的 key - value 字典表
        IsolatedStorageSettings.ApplicationSettings 
-  按应用程序保存的 key - value 字典表

------------------------------------------------------------------------------------
  涉及的常见操作有:
      目录类:
       DirectoryExists(path) 
-  指定的路径是否存在
       CreateDirectory(path) 
-  创建指定的路径
       GetDirectoryNames() 
-  获取根目录下的目录名数组
       GetDirectoryNames(path) 
-  获取指定目录下的目录名数组
       DeleteDirectory(path) 
-  删除指定的目录(要求目录存在,且目录内无内容)
       
       文件类:
       FileExists(path) 
-  指定的文件是否存在
       CreateFile(path) 
-  创建指定的文件
       GetFileNames()() 
-  获取根目录下的文件名数组
       GetFileNames(path) 
-  获取指定目录下的文件名数组
       OpenFile() 
-  打开指定的文件。 
       DeleteFile(path) 
-  删除指定的文件

       键值操作:
       Add()
- 增加键值对
       Remove()
- 移除键值对
       appSetting[键名]或siteSetting[键名]
- 根据键名取键值
         
       配额操作:
       Quota
- 取得当前配额
       AvailableFreeSpace
- 当前可用配额
        IncreaseQuotaTo(newQuotaSize) 
-  增加到指定的配额
       其它:
       Clear()
-  将IsolatedStorageFile 存储的项的计数重置为0,并释放集合中所有元素的引用       
       Remove() 
-  关闭 IsolatedStorageFile 对象并移除独立存储内的全部内容
       System.IO.Path.Combine() 
- 配合目录操作进行目录合成(与Isolated Storage配合使用)

http://www.cnblogs.com/wsdj-ITtech/archive/2009/07/31/1535788.html

你可能感兴趣的:(silverlight)