Silverlight中的独立存储是其内部的可信任的可访问文件空间,在这里你可以使用Silverlight随意的创建、读取、写入、删除目录和文 件,它有一些类似于Cookie,但是它可以在客户端保存大量的数据。这个空间默认是1M,如果不够的时候可以申请扩大容量。

        网站+用户+应用程序定位一个独立存储,也就是说必须得相同网站,相同用户,相同应用程序才能够访问这个独立的存储空间。独立存储 是IsolatedStorageFile密封类来进行设置的,这个类分布在命名空间System.IO.IsolatedStorag。我们引用 System.IO命名空间对文件进行操作。下面我们来看一个演示的Xaml代码如下:

 

  1. <Grid x:Name="LayoutRoot" Background="White"
  2.      <Button Content="设置独立存储" Height="23" HorizontalAlignment="Left" Margin="29,79,0,0" 
  3.              Name="btnSetStorage" VerticalAlignment="Top" Width="75" Click="btnSetStorage_Click" /> 
  4.      <Button Content="清空独立存储" Height="23" HorizontalAlignment="Left" Margin="268,79,0,0" 
  5.              Name="btnClearStorage" VerticalAlignment="Top" Width="75" Click="btnClearStorage_Click" /> 
  6.      <Button Content="获取独立存储列表" Height="23" HorizontalAlignment="Left" Margin="142,79,0,0" 
  7.              Name="btnGetStorage" VerticalAlignment="Top" Width="107" Click="btnGetStorage_Click" /> 
  8.      <ListBox Height="165" HorizontalAlignment="Left" Margin="12,123,0,0" Name="listBox1" 
  9.               VerticalAlignment="Top" Width="166" /> 
  10.      <ListBox Height="165" HorizontalAlignment="Left" Margin="198,123,0,0" Name="listBox2"  
  11.               VerticalAlignment="Top" Width="166" /> 
  12.      <Button Content="读取" Height="23" HorizontalAlignment="Left" Margin="365,79,0,0"  
  13.              Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" /> 
  14.      <sdk:Label Height="28" HorizontalAlignment="Left" Margin="370,123,0,0" Name="label1" 
  15.                 VerticalAlignment="Top" Width="189" /> 
  16.      <sdk:Label Height="28" HorizontalAlignment="Left" Margin="370,181,0,0" Name="label2"  
  17.                 VerticalAlignment="Top" Width="189" /> 
  18.  </Grid> 

        然后我们来看Xaml.cs代码中使用IsolatedStorageFile对独立存储进行添加目录,添加文件,读取文件,删除文件及目录,扩展独立存储空间等操作。

 

  1. public partial class MainPage : UserControl 
  2.     public MainPage() 
  3.     { 
  4.         InitializeComponent(); 
  5.     } 
  6.     private void btnSetStorage_Click(object sender, RoutedEventArgs e) 
  7.     { 
  8.         using (var storage = IsolatedStorageFile.GetUserStoreForApplication()) 
  9.         {  
  10.             //创建First父目录 
  11.             if(!storage.DirectoryExists("FatherFirstDir")) 
  12.             { 
  13.                 storage.CreateDirectory("FatherFirstDir"); 
  14.                      
  15.                 //创建子目录 
  16.                 string SonDir = Path.Combine("FatherFirstDir""SonFirstDir"); 
  17.                 storage.CreateDirectory(SonDir); 
  18.  
  19.                 //创建文件 
  20.                 IsolatedStorageFileStream fileStream = storage.CreateFile(Path.Combine(SonDir, "First.txt")); 
  21.                 using (StreamWriter swriter = new StreamWriter(fileStream)) 
  22.                 { 
  23.                     swriter.Write("这是第一个程序txt"); 
  24.                 } 
  25.                 fileStream.Close(); 
  26.             } 
  27.  
  28.             //创建Secend父目录 
  29.             if (!storage.DirectoryExists("FatherSecendDir")) 
  30.             { 
  31.                 storage.CreateDirectory("FatherSecendDir"); 
  32.                 //在一级目录下添加一个文件 
  33.             IsolatedStorageFileStream fileStream = storage.CreateFile(Path.Combine("FatherSecendDir""second.txt")); 
  34.                 using (StreamWriter swriter = new StreamWriter(fileStream)) 
  35.                 { 
  36.                     swriter.Write("新的txt程序"); 
  37.                 } 
  38.                 fileStream.Close(); 
  39.             } 
  40.  
  41.             //当前的独立存储状态 
  42.             this.label1.Content = "最大空间量:" + storage.Quota + "  已使用量:" + storage.UsedSize; 
  43.             //获取文件First.txt的值 
  44.             using (StreamReader reader = new StreamReader(storage.OpenFile("FatherFirstDir\\SonFirstDir\\First.txt"
  45.                 FileMode.Open, FileAccess.Read))) 
  46.             { 
  47.                 this.label2.Content = reader.ReadToEnd(); 
  48.             } 
  49.  
  50.         } 
  51.     } 
  52.  
  53.     private void btnGetStorage_Click(object sender, RoutedEventArgs e) 
  54.     { 
  55.         //获取文件夹中的文件以及所有的文件夹名称 
  56.         using (var storage = IsolatedStorageFile.GetUserStoreForApplication()) 
  57.         { 
  58.             if (storage.DirectoryExists("FatherSecendDir")) 
  59.             { 
  60.                 String[] fileList = storage.GetFileNames("FatherSecendDir/"); 
  61.                 this.listBox1.ItemsSource = fileList; 
  62.  
  63.                 String[] dirList = storage.GetDirectoryNames("*"); 
  64.                 this.listBox2.ItemsSource = dirList; 
  65.             } 
  66.         } 
  67.     } 
  68.  
  69.     private void btnClearStorage_Click(object sender, RoutedEventArgs e) 
  70.     { 
  71.         //删除所有的文件以及文件夹 
  72.         using (var storage = IsolatedStorageFile.GetUserStoreForApplication()) 
  73.         { 
  74.             //在这里简单做一个判断,实际应用过程中不可 
  75.             if (storage.FileExists("FatherFirstDir\\SonFirstDir\\First.txt")) 
  76.             { 
  77.                 storage.DeleteFile("FatherFirstDir\\SonFirstDir\\First.txt"); 
  78.                 storage.DeleteDirectory("FatherFirstDir\\SonFirstDir"); 
  79.                 storage.DeleteDirectory("FatherFirstDir"); 
  80.                 storage.DeleteFile("FatherSecendDir\\second.txt"); 
  81.                 storage.DeleteDirectory("FatherSecendDir"); 
  82.             } 
  83.         } 
  84.     } 
  85.  
  86.     private void button1_Click(object sender, RoutedEventArgs e) 
  87.     { 
  88.         int addSpaceSize = 2097152; 
  89.         //增加最大独立存储空间量 
  90.         using (var storage = IsolatedStorageFile.GetUserStoreForApplication()) 
  91.         { 
  92.             if (storage.AvailableFreeSpace < addSpaceSize) 
  93.             { 
  94.                 storage.IncreaseQuotaTo(storage.Quota+ addSpaceSize); 
  95.             } 
  96.             this.label1.Content = "最大空间量:" + storage.Quota + "  已使用量:" + storage.UsedSize; 
  97.         } 
  98.  
  99.     } 

        现在我们来看看如何去看独立存储中的文件夹以及文件,在下图位置设置断点,然后调试,先点击"设置独立存储",然后点击"获取独立存储",然后安装下面去 找到m_AppFilesPath字段的值,复制这个值到Windows文件夹的地址栏,按下确定键即可进入独立存储空间的目录下。在这里你可以看到以下 的独立存储文件夹。

 

        最后我们看看运行效果如下,如需源码请点击 SLStorage.zip 下载。