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
操作方法:在"一级目录名"输入框内输入一级目录名"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.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
}
}
代码总结:
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配合使用)
前往:Silverlight学习笔记清单
本文程序在Silverlight2.0和VS2008环境中调试通过。本文参照了部分网络资料,希望能够抛砖引玉,大家共同学习。
(转载本文请注明出处)