< 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
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(); } /**/ /// <summary> /// 演示 IsolatedStorageFile /// </summary> 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); isfs.Close(); } if (!isf.FileExists(file02)) { IsolatedStorageFileStream isfs = isf.CreateFile(file02); isfs.Close(); } if (!isf.FileExists(file03)) { IsolatedStorageFileStream isfs = isf.CreateFile(file03); isfs.Close(); } 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 += directoryName + " \r\n "; } txtMsg.Text += " 目录 Directory01/SubDirectory01 下的*.txt文件列表:\r\n "; // 获取 Directory01/SubDirectory01 目录下的后缀名为 txt 的文件名数组 foreach ( string fileName in isf.GetFileNames(System.IO.Path.Combine(subDirectory01, " *.txt "))) { txtMsg.Text += fileName + " \r\n "; } 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 if (isf.FileExists(file01)) { isf.DeleteFile(file01); } try { // 删除目录 subDirectory01 isf.DeleteDirectory(subDirectory01); } catch (IsolatedStorageException ex) { // IsolatedStorageException - 操作临时存储失败时抛出的异常 // 因为 subDirectory01 目录内还有文件,所以会抛异常 txtMsg.Text += ex.Message; } } } /**/ /// <summary> /// 演示 IsolatedStorageSettings /// </summary> 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 "; txtMsg2.Text += ( string)iss[ " key "] + " \r\n "; // Remove(key) - 移除指定的 key // Count - 字典表内的总的 key-value 数 iss.Remove( " key "); txtMsg2.Text += iss.Count; } private void increase_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)); } } } }
演示 IsolatedStorageFile 的运行结果:
根目录下的目录列表:Directory01Directory02根目录下的文件列表:RootFile01.txt__LocalSettings目录 Directory01 下的目录列表:SubDirectory01目录 Directory01/SubDirectory01 下的*.txt文件列表:File01.txtFile02.txt文件 File01.txt 的内容:我是:webabcd我专注于asp.net, Silverlight无法删除,目录不为空或不存在。演示 IsolatedStorageSettings 的运行结果:valuevalue20