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

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




}
}

代码总结:

  涉及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

posted @ 2010-12-07 14:04  董雨  阅读(300)  评论(0编辑  收藏  举报