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

  在"SilverLight学习笔记--进一步学习Isolated Storage独立存储一(理论篇)"中,我们对Isolated Storage独立存储相关概念进行了清理,在本篇,我们一起通过建立一个实例来看看Isolated Storage独立存储常见的相关操作。       
  首先我们在VS2008下新建立一个Silverligth应用程序,程序名命名为:MyIsolateSL.
  SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇)
编辑Page.xaml文件,建立程序用户界面,如图
SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇)
Page.xaml代码如下: 


    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=" 清空目录列表SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇)" 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、获取根目录下第一级目录列表
     操作方法:直接点击"获取根目录下第一级目录列表"按钮,可以看到,当前根目录下没有任何子目录。
     代码如下:


        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独立存储二(实践篇)
  我们可以再以此方法建立名为"R2"和"R3"的二个子目录
SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇)
代码如下:


        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独立存储二(实践篇)
   删除后
SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇)
代码如下:


        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独立存储二(实践篇)
 代码如下:


        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"一级目录下没有任何子目录。
 代码如下:


        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独立存储二(实践篇)
 同样的方法,建立"R1-2","R1-3"等子目录
 代码如下:


        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独立存储二(实践篇)
 代码如下:


        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独立存储二(实践篇)

(二)、文件操作
    我们只涉及在根目录下进行文件的操作,如果要涉及到子目录下文件操作可以参见上面提及的"目录操作"来配合进行。
    1、获取根目录下文件名列表
     操作方法:直接点击"获取根目录下文件名列表"按钮,可以看到当前根目录下没有任何文件。
代码如下:


        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独立存储二(实践篇)
代码如下:
 


        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独立存储二(实践篇)
代码如下:


        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独立存储二(实践篇)
代码如下:


        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独立存储二(实践篇)
代码如下:


        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,代码如下:

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


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


        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独立存储二(实践篇)

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


        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

 

 


        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独立存储二(实践篇)
 代码如下 :


        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的全部如下:

SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇)using System;
SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇)
using System.Collections.Generic;
SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇)
using System.Linq;
SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇)
using System.Net;
SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇)
using System.Windows;
SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇)
using System.Windows.Controls;
SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇)
using System.Windows.Documents;
SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇)
using System.Windows.Input;
SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇)
using System.Windows.Media;
SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇)
using System.Windows.Media.Animation;
SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇)
using System.Windows.Shapes;
SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇)
using System.IO.IsolatedStorage; //添加进行IsolatedStorage操作的命名空间
SilverLight学习笔记--进一步学习Isolated Storage独立存储二(实践篇)

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

代码总结:

  涉及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配合使用)

 

前往:Silverlight学习笔记清单
本文程序在Silverlight2.0和VS2008环境中调试通过。本文参照了部分网络资料,希望能够抛砖引玉,大家共同学习。
(转载本文请注明出处)

相关文章: