zoukankan      html  css  js  c++  java
  • 稳扎稳打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://www.cnblogs.com/webabcd/archive/2008/10/09/1307486.html


    示例
    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
    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 的运行结果:
    根目录下的目录列表:
    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
    [源码下载]
  • 相关阅读:
    JetBrains全系列破解
    BZOJ 4817: [Sdoi2017]树点涂色 LCT + DFS序 + 线段树
    LOJ #6041. 「雅礼集训 2017 Day7」事情的相似度 LCT + SAM + 线段树
    Uoj 52. 【UR #4】元旦激光炮 交互题
    Uoj #218. 【UNR #1】火车管理 可持久化线段树+思维
    luoguP3979 遥远的国度 LCT + multiset维护子树信息
    BZOJ 4999: This Problem Is Too Simple! DFS序 + LCA + 树状数组 + 离线
    BZOJ 1787: [Ahoi2008]Meet 紧急集合
    BZOJ 2959: 长跑 LCT + 并查集 + 点双
    BZOJ 4259: 残缺的字符串 FFT
  • 原文地址:https://www.cnblogs.com/webabcd/p/1339653.html
Copyright © 2011-2022 走看看