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

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

<Grid x:Name="LayoutRoot" Background="White">
<Button Content="设置独立存储" Height="23" HorizontalAlignment="Left" Margin="29,79,0,0"
Name="btnSetStorage" VerticalAlignment="Top" Width="75" Click="btnSetStorage_Click" />
<Button Content="清空独立存储" Height="23" HorizontalAlignment="Left" Margin="268,79,0,0"
Name="btnClearStorage" VerticalAlignment="Top" Width="75" Click="btnClearStorage_Click" />
<Button Content="获取独立存储列表" Height="23" HorizontalAlignment="Left" Margin="142,79,0,0"
Name="btnGetStorage" VerticalAlignment="Top" Width="107" Click="btnGetStorage_Click" />
<ListBox Height="165" HorizontalAlignment="Left" Margin="12,123,0,0" Name="listBox1"
VerticalAlignment="Top" Width="166" />
<ListBox Height="165" HorizontalAlignment="Left" Margin="198,123,0,0" Name="listBox2"
VerticalAlignment="Top" Width="166" />
<Button Content="读取" Height="23" HorizontalAlignment="Left" Margin="365,79,0,0"
Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
<sdk:Label Height="28" HorizontalAlignment="Left" Margin="370,123,0,0" Name="label1"
VerticalAlignment="Top" Width="189" />
<sdk:Label Height="28" HorizontalAlignment="Left" Margin="370,181,0,0" Name="label2"
VerticalAlignment="Top" Width="189" />
</Grid>

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

public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
}
private void btnSetStorage_Click(object sender, RoutedEventArgs e)
{
using (var storage = IsolatedStorageFile.GetUserStoreForApplication())
{
//创建First父目录
if(!storage.DirectoryExists("FatherFirstDir"))
{
storage.CreateDirectory("FatherFirstDir");
 
//创建子目录
string SonDir = Path.Combine("FatherFirstDir", "SonFirstDir");
storage.CreateDirectory(SonDir);
 
//创建文件
IsolatedStorageFileStream fileStream = storage.CreateFile(Path.Combine(SonDir, "First.txt"));
using (StreamWriter swriter = new StreamWriter(fileStream))
{
swriter.Write("这是第一个程序txt");
}
fileStream.Close();
}
 
//创建Secend父目录
if (!storage.DirectoryExists("FatherSecendDir"))
{
storage.CreateDirectory("FatherSecendDir");
//在一级目录下添加一个文件
IsolatedStorageFileStream fileStream = storage.CreateFile(Path.Combine("FatherSecendDir", "second.txt"));
using (StreamWriter swriter = new StreamWriter(fileStream))
{
swriter.Write("新的txt程序");
}
fileStream.Close();
}
 
//当前的独立存储状态
this.label1.Content = "最大空间量:" + storage.Quota + " 已使用量:" + storage.UsedSize;
//获取文件First.txt的值
using (StreamReader reader = new StreamReader(storage.OpenFile("FatherFirstDir\\SonFirstDir\\First.txt",
FileMode.Open, FileAccess.Read)))
{
this.label2.Content = reader.ReadToEnd();
}
 
}
}
 
private void btnGetStorage_Click(object sender, RoutedEventArgs e)
{
//获取文件夹中的文件以及所有的文件夹名称
using (var storage = IsolatedStorageFile.GetUserStoreForApplication())
{
if (storage.DirectoryExists("FatherSecendDir"))
{
String[] fileList = storage.GetFileNames("FatherSecendDir/");
this.listBox1.ItemsSource = fileList;
 
String[] dirList = storage.GetDirectoryNames("*");
this.listBox2.ItemsSource = dirList;
}
}
}
 
private void btnClearStorage_Click(object sender, RoutedEventArgs e)
{
//删除所有的文件以及文件夹
using (var storage = IsolatedStorageFile.GetUserStoreForApplication())
{
//在这里简单做一个判断,实际应用过程中不可
if (storage.FileExists("FatherFirstDir\\SonFirstDir\\First.txt"))
{
storage.DeleteFile("FatherFirstDir\\SonFirstDir\\First.txt");
storage.DeleteDirectory("FatherFirstDir\\SonFirstDir");
storage.DeleteDirectory("FatherFirstDir");
storage.DeleteFile("FatherSecendDir\\second.txt");
storage.DeleteDirectory("FatherSecendDir");
}
}
}
 
private void button1_Click(object sender, RoutedEventArgs e)
{
int addSpaceSize = 2097152;
//增加最大独立存储空间量
using (var storage = IsolatedStorageFile.GetUserStoreForApplication())
{
if (storage.AvailableFreeSpace < addSpaceSize)
{
storage.IncreaseQuotaTo(storage.Quota+ addSpaceSize);
}
this.label1.Content = "最大空间量:" + storage.Quota + " 已使用量:" + storage.UsedSize;
}
 
}
}

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

Silverlight-管理独立存储(Isolated Storage)的更多相关文章

  1. C Primer Plus--C存储类、链接和内存管理之存储类(storage class)

    目录 存储类 作用域 链接 存储时期 自动变量 寄存器变量 具有代码块作用域的静态变量 具有外部链接的静态变量 extern关键字 具有内部链接的静态变量 多文件 存储类 C为变量提供了5种不同的存储 ...

  2. 与众不同 windows phone (6) - Isolated Storage(独立存储)

    原文:与众不同 windows phone (6) - Isolated Storage(独立存储) [索引页][源码下载] 与众不同 windows phone (6) - Isolated Sto ...

  3. Silverlight 独立存储(IsolatedStorageFile)

    1.在Web中添加天气服务引用地址 http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl 2.在Web中添加Wcf服务接口I ...

  4. Atitit usrqbg1821 Tls 线程本地存储(ThreadLocal Storage 规范标准化草案解决方案ThreadStatic

    Atitit usrqbg1821 Tls 线程本地存储(ThreadLocal Storage 规范标准化草案解决方案ThreadStatic 1.1. ThreadLocal 设计模式1 1.2. ...

  5. Windows Server 2016软件定义存储:Storage Spaces Direct的关键特性

    [TechTarget中国原创] 微软在Windows Server 2016 Technical Preview 2中引入了Storage Spaces Direct.这个特性将本地存储扩展为高可用 ...

  6. 利用KeyVault来加强存储Azure Storage访问密钥管理

    很多时候管理Azure的存储账号我们都需要通过下面的界面管理访问密钥,大部分情况下通过密钥的轮替使用更新就可以做到安全管理了. 但是很多时候存储账号的Key就会不小心分发到开人员.测试人员.和管理员手 ...

  7. win10的独立存储

    win10的独立存储和win8的大致相同 Windows.Storage.ApplicationDataContainer roamingSettings = Windows.Storage.Appl ...

  8. 开放系统的直连式存储(Direct-Attached Storage,简称DAS)

    开放系统的直连式存储(Direct-Attached Storage,简称DAS)已经有近四十年的使用历史,随着用户数据的不断增长,尤其是数百GB以上时,其在备份.恢复.扩展.灾备等方面的问题变得日益 ...

  9. HTML5本地存储(Local Storage) 的前世今生

    长久以来本地存储能力一直是桌面应用区别于Web应用的一个主要优势.对于桌面应用(或者原生应用),操作系统一般都提供了一个抽象层用来帮助应用程序保存其本地数据 例如(用户配置信息或者运行时状态等). 常 ...

随机推荐

  1. Exercise01_07

    public class Outcome{ public static void main(String[] args){ double x, y; x=4*(1.0-1.0/3+1.0/5-1.0/ ...

  2. Vimperator常用快捷键

    分别往下/往上滚动窗口一行 j/k 左右滚动窗口     h/l 向下/向上滚动一屏的窗口 <Space>/<C-b> 向下/向上滚动半屏的窗口 <C-d>/< ...

  3. Linux下使用xargs将多行文本转换成一行并用tr实现逗号隔开

    准备: cat test.txt 示例: cat test.txt | xargs 可以看出得到的字符串为空格隔开的. 再把上面的字符串用逗号隔开,可以使用tr命令进行空格的替换 cat test.t ...

  4. PHP将字符串首字母大小写转换

    每个单词的首字母转换为大写:ucwords() <?php $foo = 'hello world!'; $foo = ucwords($foo); // Hello World! $bar = ...

  5. vue假全家桶升级方式,形成类似于小程序的路径管理(新增require-css与require-text)

    1.路径布局大致就是这样,完全模拟小程序,主要是靠require来做到的 2.首先index.html是这样的(配置js和css没有用requireJs主要是方便而且载入什么组件比较清晰) <! ...

  6. angular directive 的controllerAs的用法

    原文: https://stackoverflow.com/questions/31857735/using-controlleras-with-a-directive --------------- ...

  7. ZOJ 3526 Weekend Party

    Weekend Party Time Limit: 2 Seconds      Memory Limit: 65536 KB As the only Oni (a kind of fabulous ...

  8. CMA连续物理内存用户空间映射---(二)

    摘要: 相对于上一篇測试程序CMA连续物理内存用户空间映射---(一) 添加功能: 1.分配和映射统一放在IOCTL,一次完毕,能够连续多次分配并映射到用户空间,提高操作性: 2.驱动添加链表,使分配 ...

  9. [Angular] Angular Attribute Decorator - When to use it?

    When we pass value to a component, normally we use @Input. <my-comp [courses]="(courses$ | a ...

  10. react-native 模仿原生 实现下拉刷新/上拉加载更多(RefreshListView)

    1.下拉刷新/上拉加载更多 组件(RefreshListView) src/components/RefreshListView/index.js /** * 下拉刷新/上拉加载更多 组件(Refre ...