天天看点

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

<a href="http://webabcd.blog.51cto.com/1787395/342790" target="_blank">[索引页]</a>

<a href="http://down.51cto.com/data/100302" target="_blank">[源码下载]</a>

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

介绍

Silverlight 2.0 数据的独立存储(Isolated Storage):

    IsolatedStorageFile - 操作 独立存储 的类

        IsolatedStorageFile.GetUserStoreForSite() - 按站点获取用户的独立存储

        IsolatedStorageFile.GetUserStoreForApplication() - 按应用程序获取用户的独立存储

    IsolatedStorageSettings - 在独立存储中保存的 key-value 字典表

        IsolatedStorageSettings.SiteSettings - 按站点保存的 key-value 字典表

        IsolatedStorageSettings.ApplicationSettings - 按应用程序保存的 key-value 字典表

在线DEMO

示例

IsolatedStorage.xaml

&lt;UserControl x:Class="Silverlight20.Data.IsolatedStorage" 

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"&gt; 

        &lt;StackPanel HorizontalAlignment="Left"&gt; 

                &lt;TextBox x:Name="txtMsg" Margin="5" /&gt; 

                &lt;TextBox x:Name="txtMsg2" Margin="5" /&gt; 

                &lt;Button x:Name="increase" Content="增加配额" Click="increase_Click" Margin="5" /&gt; 

        &lt;/StackPanel&gt; 

&lt;/UserControl&gt;

IsolatedStorage.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; 

using System.IO; 

namespace Silverlight20.Data 

        public partial class IsolatedStorage : UserControl 

        { 

                public IsolatedStorage() 

                { 

                        InitializeComponent(); 

                        // 演示 IsolatedStorageFile 

                        Demo(); 

                        // 演示 IsolatedStorageSettings 

                        Demo2(); 

                } 

                /// &lt;summary&gt; 

                /// 演示 IsolatedStorageFile 

                /// &lt;/summary&gt; 

                void Demo() 

                        // Isolated Storage - 独立存储。一个虚拟文件系统 

                        // IsolatedStorageFile - 操作 独立存储 的类 

                        //         IsolatedStorageFile.GetUserStoreForSite() - 按站点获取用户的独立存储 

                        //         IsolatedStorageFile.GetUserStoreForApplication() - 按应用程序获取用户的独立存储 

                        // using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForSite()) 

                        using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication()) 

                        { 

                                // DirectoryExists(path) - 指定的路径是否存在 

                                // CreateDirectory(path) - 创建指定的路径 

                                // FileExists(path) - 指定的文件是否存在 

                                // CreateFile(path) - 创建指定的文件 

                                // GetDirectoryNames() - 获取根目录下的目录名数组 

                                // GetFileNames()() - 获取根目录下的文件名数组 

                                // GetDirectoryNames(path) - 获取指定目录下的目录名数组 

                                // GetFileNames(path) - 获取指定目录下的文件名数组 

                                // OpenFile() - 打开指定的文件。具体参数参看文档 

                                // DeleteFile(path) - 删除指定的文件 

                                // DeleteDirectory(path) - 删除指定的目录(要求目录存在,且目录内无内容) 

                                // Remove() - 关闭 IsolatedStorageFile 对象并移除独立存储内的全部内容 

                                // 在根目录下创建指定的目录 

                                if (!isf.DirectoryExists("Directory01")) 

                                        isf.CreateDirectory("Directory01"); 

                                if (!isf.DirectoryExists("Directory02")) 

                                        isf.CreateDirectory("Directory02"); 

                                // 创建指定的子目录 

                                string subDirectory01 = System.IO.Path.Combine("Directory01", "SubDirectory01"); 

                                string subDirectory02 = System.IO.Path.Combine("Directory01", "SubDirectory02"); 

                                if (!isf.DirectoryExists(subDirectory01)) 

                                        isf.CreateDirectory(subDirectory01); 

                                if (!isf.DirectoryExists(subDirectory02)) 

                                        isf.CreateDirectory(subDirectory02); 

                                // 根目录下创建指定的文件 

                                if (!isf.FileExists("RootFile.txt")) 

                                { 

                                        IsolatedStorageFileStream isfs = isf.CreateFile("RootFile01.txt"); 

                                        isfs.Close(); 

                                } 

                                // 在指定的目录下创建指定的文件 

                                string file01 = System.IO.Path.Combine(subDirectory01, "File01.txt"); 

                                string file02 = System.IO.Path.Combine(subDirectory01, "File02.txt"); 

                                string file03 = System.IO.Path.Combine(subDirectory01, "File03.xml"); 

                                if (!isf.FileExists(file01)) 

                                        // IsolatedStorageFileStream - 独立存储内的文件流。继承自 FileStream 

                                        IsolatedStorageFileStream isfs = isf.CreateFile(file01); 

                                if (!isf.FileExists(file02)) 

                                        IsolatedStorageFileStream isfs = isf.CreateFile(file02); 

                                if (!isf.FileExists(file03)) 

                                        IsolatedStorageFileStream isfs = isf.CreateFile(file03); 

                                txtMsg.Text += "根目录下的目录列表:\r\n"; 

                                // 获取根目录下的目录名数组 

                                foreach (string directoryName in isf.GetDirectoryNames()) 

                                        txtMsg.Text += directoryName + "\r\n"; 

                                txtMsg.Text += "根目录下的文件列表:\r\n"; 

                                // 获取根目录下的文件名数组 

                                foreach (string fileName in isf.GetFileNames()) 

                                        txtMsg.Text += fileName + "\r\n"; 

                                txtMsg.Text += "目录 Directory01 下的目录列表:\r\n"; 

                                // 获取 Directory01 目录下的目录名数组 

                                foreach (string directoryName in isf.GetDirectoryNames(subDirectory01)) 

                                txtMsg.Text += "目录 Directory01/SubDirectory01 下的*.txt文件列表:\r\n"; 

                                // 获取 Directory01/SubDirectory01 目录下的后缀名为 txt 的文件名数组 

                                foreach (string fileName in isf.GetFileNames(System.IO.Path.Combine(subDirectory01, "*.txt"))) 

                                if (isf.FileExists(file01)) 

                                        // 在文件 file01 中写入内容 

                                        IsolatedStorageFileStream streamWrite = isf.OpenFile(file01, FileMode.Open, FileAccess.Write); 

                                        using (StreamWriter sw = new StreamWriter(streamWrite)) 

                                        { 

                                                sw.WriteLine("我是:webabcd"); 

                                                sw.WriteLine("我专注于asp.net, Silverlight"); 

                                        } 

                                        txtMsg.Text += "文件 File01.txt 的内容:\r\n"; 

                                        // 读取文件 file01 中的内容 

                                        IsolatedStorageFileStream streamRead = isf.OpenFile(file01, FileMode.Open, FileAccess.Read); 

                                        using (StreamReader sr = new StreamReader(streamRead)) 

                                                txtMsg.Text += sr.ReadToEnd(); 

                                // 删除文件 file01 

                                        isf.DeleteFile(file01); 

                                try 

                                        // 删除目录 subDirectory01 

                                        isf.DeleteDirectory(subDirectory01); 

                                catch (IsolatedStorageException ex) 

                                        // IsolatedStorageException - 操作临时存储失败时抛出的异常 

                                        // 因为 subDirectory01 目录内还有文件,所以会抛异常 

                                        txtMsg.Text += ex.Message; 

                        } 

                /// 演示 IsolatedStorageSettings 

                void Demo2() 

                        // IsolatedStorageSettings - 在独立存储中保存的 key-value 字典表 

                        //         IsolatedStorageSettings.SiteSettings - 按站点保存的 key-value 字典表 

                        //         IsolatedStorageSettings.ApplicationSettings - 按应用程序保存的 key-value 字典表 

                        IsolatedStorageSettings iss = IsolatedStorageSettings.ApplicationSettings; 

                        // Add(key, value) - 添加一对 key-value 

                        iss.Add("key", "value"); 

                        txtMsg2.Text += (string)iss["key"] + "\r\n"; 

                        // 修改指定的 key 的 value 

                        iss["key"] = "value2"; 

                        // Remove(key) - 移除指定的 key 

                        // Count - 字典表内的总的 key-value 数 

                        iss.Remove("key"); 

                        txtMsg2.Text += iss.Count; 

                private void increase_Click(object sender, RoutedEventArgs e) 

                        // 演示独立存储的配额的相关操作 

                                // 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)); 

                }    

        } 

}

演示 IsolatedStorageFile 的运行结果:

根目录下的目录列表:

Directory01

Directory02

根目录下的文件列表:

RootFile01.txt

__LocalSettings

目录 Directory01 下的目录列表:

SubDirectory01

目录 Directory01/SubDirectory01 下的*.txt文件列表:

File01.txt

File02.txt

文件 File01.txt 的内容:

我是:webabcd

我专注于asp.net, Silverlight

无法删除,目录不为空或不存在。

演示 IsolatedStorageSettings 的运行结果:

value

value2

OK

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