稳扎稳打Silverlight(16) - 2.0数据之独立存储(Isolated Storage)

简介:
[索引页]
[源码下载]


稳扎稳打Silverlight(16) - 2.0数据之独立存储(Isolated Storage)


作者: webabcd


介绍
Silverlight 2.0 数据的独立存储(Isolated Storage):
    IsolatedStorageFile - 操作 独立存储 的类
        IsolatedStorageFile.GetUserStoreForSite() - 按站点获取用户的独立存储
        IsolatedStorageFile.GetUserStoreForApplication() - 按应用程序获取用户的独立存储
    IsolatedStorageSettings - 在独立存储中保存的 key-value 字典表
        IsolatedStorageSettings.SiteSettings - 按站点保存的 key-value 字典表
        IsolatedStorageSettings.ApplicationSettings - 按应用程序保存的 key-value 字典表


在线DEMO
http://webabcd.blog.51cto.com/1787395/342779 


示例
IsolatedStorage.xaml
<UserControl x:Class="Silverlight20.Data.IsolatedStorage" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
        <StackPanel HorizontalAlignment="Left"> 
                <TextBox x:Name="txtMsg" Margin="5" /> 
                <TextBox x:Name="txtMsg2" Margin="5" /> 
                <Button x:Name="increase" Content="增加配额" Click="increase_Click" Margin="5" /> 
        </StackPanel> 
</UserControl>
 
IsolatedStorage.xaml.cs
InBlock.gif using System; 
InBlock.gif using System.Collections.Generic; 
InBlock.gif using System.Linq; 
InBlock.gif using System.Net; 
InBlock.gif using System.Windows; 
InBlock.gif using System.Windows.Controls; 
InBlock.gif using System.Windows.Documents; 
InBlock.gif using System.Windows.Input; 
InBlock.gif using System.Windows.Media; 
InBlock.gif using System.Windows.Media.Animation; 
InBlock.gif using System.Windows.Shapes; 
InBlock.gif 
InBlock.gif using System.IO.IsolatedStorage; 
InBlock.gif using System.IO; 
InBlock.gif 
InBlock.gif namespace Silverlight20.Data 
InBlock.gif
InBlock.gif         public partial  class IsolatedStorage : UserControl 
InBlock.gif        { 
InBlock.gif                 public IsolatedStorage() 
InBlock.gif                { 
InBlock.gif                        InitializeComponent(); 
InBlock.gif 
InBlock.gif                         // 演示 IsolatedStorageFile 
InBlock.gif                        Demo(); 
InBlock.gif 
InBlock.gif                         // 演示 IsolatedStorageSettings 
InBlock.gif                        Demo2(); 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                 /// <summary> 
InBlock.gif                 /// 演示 IsolatedStorageFile 
InBlock.gif                 /// </summary> 
InBlock.gif                 void Demo() 
InBlock.gif                { 
InBlock.gif                         // Isolated Storage - 独立存储。一个虚拟文件系统 
InBlock.gif 
InBlock.gif                         // IsolatedStorageFile - 操作 独立存储 的类 
InBlock.gif                         //         IsolatedStorageFile.GetUserStoreForSite() - 按站点获取用户的独立存储 
InBlock.gif                         //         IsolatedStorageFile.GetUserStoreForApplication() - 按应用程序获取用户的独立存储 
InBlock.gif                         
InBlock.gif                         // using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForSite()) 
InBlock.gif                         using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication()) 
InBlock.gif                        { 
InBlock.gif                                 // DirectoryExists(path) - 指定的路径是否存在 
InBlock.gif                                 // CreateDirectory(path) - 创建指定的路径 
InBlock.gif                                 // FileExists(path) - 指定的文件是否存在 
InBlock.gif                                 // CreateFile(path) - 创建指定的文件 
InBlock.gif                                 // GetDirectoryNames() - 获取根目录下的目录名数组 
InBlock.gif                                 // GetFileNames()() - 获取根目录下的文件名数组 
InBlock.gif                                 // GetDirectoryNames(path) - 获取指定目录下的目录名数组 
InBlock.gif                                 // GetFileNames(path) - 获取指定目录下的文件名数组 
InBlock.gif                                 // OpenFile() - 打开指定的文件。具体参数参看文档 
InBlock.gif                                 // DeleteFile(path) - 删除指定的文件 
InBlock.gif                                 // DeleteDirectory(path) - 删除指定的目录(要求目录存在,且目录内无内容) 
InBlock.gif                                 // Remove() - 关闭 IsolatedStorageFile 对象并移除独立存储内的全部内容 
InBlock.gif 
InBlock.gif 
InBlock.gif                                 // 在根目录下创建指定的目录 
InBlock.gif                                 if (!isf.DirectoryExists( "Directory01")) 
InBlock.gif                                        isf.CreateDirectory( "Directory01"); 
InBlock.gif                                 if (!isf.DirectoryExists( "Directory02")) 
InBlock.gif                                        isf.CreateDirectory( "Directory02"); 
InBlock.gif 
InBlock.gif                                 // 创建指定的子目录 
InBlock.gif                                 string subDirectory01 = System.IO.Path.Combine( "Directory01""SubDirectory01"); 
InBlock.gif                                 string subDirectory02 = System.IO.Path.Combine( "Directory01""SubDirectory02"); 
InBlock.gif                                 if (!isf.DirectoryExists(subDirectory01)) 
InBlock.gif                                        isf.CreateDirectory(subDirectory01); 
InBlock.gif                                 if (!isf.DirectoryExists(subDirectory02)) 
InBlock.gif                                        isf.CreateDirectory(subDirectory02); 
InBlock.gif                                 
InBlock.gif 
InBlock.gif                                 // 根目录下创建指定的文件 
InBlock.gif                                 if (!isf.FileExists( "RootFile.txt")) 
InBlock.gif                                { 
InBlock.gif                                        IsolatedStorageFileStream isfs = isf.CreateFile( "RootFile01.txt"); 
InBlock.gif                                        isfs.Close(); 
InBlock.gif                                } 
InBlock.gif 
InBlock.gif                                 // 在指定的目录下创建指定的文件 
InBlock.gif                                 string file01 = System.IO.Path.Combine(subDirectory01,  "File01.txt"); 
InBlock.gif                                 string file02 = System.IO.Path.Combine(subDirectory01,  "File02.txt"); 
InBlock.gif                                 string file03 = System.IO.Path.Combine(subDirectory01,  "File03.xml"); 
InBlock.gif                                 if (!isf.FileExists(file01)) 
InBlock.gif                                { 
InBlock.gif                                         // IsolatedStorageFileStream - 独立存储内的文件流。继承自 FileStream 
InBlock.gif                                        IsolatedStorageFileStream isfs = isf.CreateFile(file01); 
InBlock.gif                                        isfs.Close(); 
InBlock.gif                                } 
InBlock.gif                                 if (!isf.FileExists(file02)) 
InBlock.gif                                { 
InBlock.gif                                        IsolatedStorageFileStream isfs = isf.CreateFile(file02); 
InBlock.gif                                        isfs.Close(); 
InBlock.gif                                } 
InBlock.gif                                 if (!isf.FileExists(file03)) 
InBlock.gif                                { 
InBlock.gif                                        IsolatedStorageFileStream isfs = isf.CreateFile(file03); 
InBlock.gif                                        isfs.Close(); 
InBlock.gif                                } 
InBlock.gif 
InBlock.gif 
InBlock.gif                                txtMsg.Text +=  "根目录下的目录列表:\r\n"
InBlock.gif                                 // 获取根目录下的目录名数组 
InBlock.gif                                 foreach ( string directoryName  in isf.GetDirectoryNames()) 
InBlock.gif                                { 
InBlock.gif                                        txtMsg.Text += directoryName +  "\r\n"
InBlock.gif                                } 
InBlock.gif 
InBlock.gif                                txtMsg.Text +=  "根目录下的文件列表:\r\n"
InBlock.gif                                 // 获取根目录下的文件名数组 
InBlock.gif                                 foreach ( string fileName  in isf.GetFileNames()) 
InBlock.gif                                { 
InBlock.gif                                        txtMsg.Text += fileName +  "\r\n"
InBlock.gif                                } 
InBlock.gif 
InBlock.gif                                txtMsg.Text +=  "目录 Directory01 下的目录列表:\r\n"
InBlock.gif                                 // 获取 Directory01 目录下的目录名数组 
InBlock.gif                                 foreach ( string directoryName  in isf.GetDirectoryNames(subDirectory01)) 
InBlock.gif                                { 
InBlock.gif                                        txtMsg.Text += directoryName +  "\r\n"
InBlock.gif                                } 
InBlock.gif 
InBlock.gif                                txtMsg.Text +=  "目录 Directory01/SubDirectory01 下的*.txt文件列表:\r\n"
InBlock.gif                                 // 获取 Directory01/SubDirectory01 目录下的后缀名为 txt 的文件名数组 
InBlock.gif                                 foreach ( string fileName  in isf.GetFileNames(System.IO.Path.Combine(subDirectory01,  "*.txt"))) 
InBlock.gif                                { 
InBlock.gif                                        txtMsg.Text += fileName +  "\r\n"
InBlock.gif                                } 
InBlock.gif 
InBlock.gif 
InBlock.gif                                 if (isf.FileExists(file01)) 
InBlock.gif                                { 
InBlock.gif                                         // 在文件 file01 中写入内容 
InBlock.gif                                        IsolatedStorageFileStream streamWrite = isf.OpenFile(file01, FileMode.Open, FileAccess.Write); 
InBlock.gif                                         using (StreamWriter sw =  new StreamWriter(streamWrite)) 
InBlock.gif                                        { 
InBlock.gif                                                sw.WriteLine( "我是:webabcd"); 
InBlock.gif                                                sw.WriteLine( "我专注于asp.net, Silverlight"); 
InBlock.gif                                        } 
InBlock.gif 
InBlock.gif                                        txtMsg.Text +=  "文件 File01.txt 的内容:\r\n"
InBlock.gif                                         // 读取文件 file01 中的内容 
InBlock.gif                                        IsolatedStorageFileStream streamRead = isf.OpenFile(file01, FileMode.Open, FileAccess.Read); 
InBlock.gif                                         using (StreamReader sr =  new StreamReader(streamRead)) 
InBlock.gif                                        { 
InBlock.gif                                                txtMsg.Text += sr.ReadToEnd(); 
InBlock.gif                                        } 
InBlock.gif                                } 
InBlock.gif 
InBlock.gif 
InBlock.gif                                 // 删除文件 file01 
InBlock.gif                                 if (isf.FileExists(file01)) 
InBlock.gif                                { 
InBlock.gif                                        isf.DeleteFile(file01); 
InBlock.gif                                } 
InBlock.gif 
InBlock.gif                                 try 
InBlock.gif                                { 
InBlock.gif                                         // 删除目录 subDirectory01 
InBlock.gif                                        isf.DeleteDirectory(subDirectory01); 
InBlock.gif                                } 
InBlock.gif                                 catch (IsolatedStorageException ex) 
InBlock.gif                                { 
InBlock.gif                                         // IsolatedStorageException - 操作临时存储失败时抛出的异常 
InBlock.gif 
InBlock.gif                                         // 因为 subDirectory01 目录内还有文件,所以会抛异常 
InBlock.gif                                        txtMsg.Text += ex.Message; 
InBlock.gif                                } 
InBlock.gif                        } 
InBlock.gif                } 
InBlock.gif 
InBlock.gif                 /// <summary> 
InBlock.gif                 /// 演示 IsolatedStorageSettings 
InBlock.gif                 /// </summary> 
InBlock.gif                 void Demo2() 
InBlock.gif                { 
InBlock.gif                         // IsolatedStorageSettings - 在独立存储中保存的 key-value 字典表 
InBlock.gif                         //         IsolatedStorageSettings.SiteSettings - 按站点保存的 key-value 字典表 
InBlock.gif                         //         IsolatedStorageSettings.ApplicationSettings - 按应用程序保存的 key-value 字典表 
InBlock.gif 
InBlock.gif                        IsolatedStorageSettings iss = IsolatedStorageSettings.ApplicationSettings; 
InBlock.gif 
InBlock.gif                         // Add(key, value) - 添加一对 key-value 
InBlock.gif                        iss.Add( "key""value"); 
InBlock.gif                        txtMsg2.Text += ( string)iss[ "key"] +  "\r\n"
InBlock.gif 
InBlock.gif                         // 修改指定的 key 的 value 
InBlock.gif                        iss[ "key"] =  "value2"
InBlock.gif                        txtMsg2.Text += ( string)iss[ "key"] +  "\r\n"
InBlock.gif 
InBlock.gif                         // Remove(key) - 移除指定的 key 
InBlock.gif                         // Count - 字典表内的总的 key-value 数 
InBlock.gif                        iss.Remove( "key"); 
InBlock.gif                        txtMsg2.Text += iss.Count; 
InBlock.gif                } 
InBlock.gif                
InBlock.gif                 private  void increase_Click( object sender, RoutedEventArgs e) 
InBlock.gif                { 
InBlock.gif                         // 演示独立存储的配额的相关操作 
InBlock.gif                         using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication()) 
InBlock.gif                        { 
InBlock.gif                                 // Quota - 当前配额(KB) 
InBlock.gif                                 // IncreaseQuotaTo(newQuotaSize) - 增加到指定的配额 
InBlock.gif                                 // AvailableFreeSpace - 当前的可用配额 
InBlock.gif 
InBlock.gif                                isf.IncreaseQuotaTo(isf.Quota + 1 * 1024 * 1024); 
InBlock.gif 
InBlock.gif                                System.Windows.Browser.HtmlPage.Window.Alert( 
InBlock.gif                                         string.Format( "当前配额:{0};可用配额:{1}", isf.Quota, isf.AvailableFreeSpace)); 
InBlock.gif                        } 
InBlock.gif                }    
InBlock.gif        } 
InBlock.gif}
 
 
演示 IsolatedStorageFile 的运行结果:
根目录下的目录列表:
Directory01
Directory02
根目录下的文件列表:
RootFile01.txt
__LocalSettings
目录 Directory01 下的目录列表:
SubDirectory01
目录 Directory01/SubDirectory01 下的*.txt文件列表:
File01.txt
File02.txt
文件 File01.txt 的内容:
我是:webabcd
我专注于asp.net, Silverlight
无法删除,目录不为空或不存在。

演示 IsolatedStorageSettings 的运行结果:
value
value2
0


OK
[源码下载]




     本文转自webabcd 51CTO博客,原文链接: http://blog.51cto.com/webabcd/343094 ,如需转载请自行联系原作者
相关文章

热门文章

最新文章