拼吾爱程序人生

首页 » .Net编程 » Silverlight » 详解Silverlight 2中的独立存储(Isolated Storage)
cobra - 2008-6-29 11:21:00
文/Terrylee  出处/博客园

概述

独立存储(Isolated Storage)是Silverlight 2中提供的一个客户端安全的存储,它是一个与Cookie机制类似的局部信任机制。独立存储机制的APIs 提供了一个虚拟的文件系统和可以访问这个虚拟文件系统的数据流对象。Silverlight中的独立存储是基于 .NET Framework中的独立存储来建立的,所以它仅仅是.NET Framework中独立存储的一个子集。

Silverlight中的独立存储有以下一些特征:

1.每个基于Silverlight的应用程序都被分配了属于它自己的一部分存储空间, 但是应用程序中的程序集却是在存储空间中共享的。一个应用程序被服务器赋给了一个唯一的固定的标识值。基于Silverlight的应用程序的虚拟文件系统现在就以一个标识值的方式来访问了。这个标识值必须是一个常量,这样每次应用程序运行时才可以找到这个共享的位置。 

2.独立存储的APIs 其实和其它的文件操作APIs类似,比如 File 和 Directory 这些用来访问和维护文件或文件夹的类。 它们都是基于FileStream APIs 来维护文件的内容的。

3.独立存储严格的限制了应用程序可以存储的数据的大小,目前的上限是每个应用程序为1 MB。

使用独立存储

Silverlight中的独立存储功能通过密封类IsolatedStorageFile来提供,位于命名空间System.IO.IsolatedStorag中,IsolatedStorageFile类抽象了独立存储的虚拟文件系统。创建一个 IsolatedStorageFile 类的实例,可以使用它对文件或文件夹进行列举或管理。同样还可以使用该类的 IsolatedStorageFileStream 对象来管理文件内容,它的定义大概如下所示:

 附件: 您所在的用户组无法下载或查看附件


在Silverlight 2中支持两种方式的独立存储,即按应用程序存储或者按站点存储,可以分别使用GetUserStoreForApplication方法和GetUserStoreForSite方法来获取IsolatedStorageFile对象。下面看一个简单的示例,最终的效果如下图所示:

 附件: 您所在的用户组无法下载或查看附件
 

下面来看各个功能的实现:

创建目录,直接使用CreateDirectory方法就可以了,另外还可以使用DirectoryExistes方法来判断目录是否已经存在:

Code


创建文件,通过CreateFile方法来获取一个IsolatedStorageFileStream,并将内容写入到文件中:

Code


读取文件,直接使用System.IO命名空间下的StreamReader:

Code


删除目录和文件:

Code


获取目录列表和文件列表:

Code


 您可能对 [Silverlight] 的这些文章也感兴趣:

使用silverlight中的Storyboard实现动画效果
一步一步学Silverlight 2系列文章
Silverlight 2 (beta1)数据操作(4)
专访Silverlight中国团队:从事最底层CLR核心代码研发
Nikhil Kothari 的基于Silverlight的动画框架 Glitz(摘要)
Silverlight在IE中无法显示但在Firefox中正常的原因和解决办法
使用SilverLight构建插件式应用程序(七)
使用Silverlight开发用户贡献内容的视频站点的快速入门包
Silverlight专题(10)- WatermarkedTextBox使用
使用SilverLight构建插件式应用程序(二)
cobra - 2008-6-29 11:24:00
增加配额

在本文一开始我就提到独立存储严格的限制了应用程序可以存储的数据的大小,但是我们可以通过IsolatedStorageFile类提供的IncreaseQuotaTo方法来申请更大的存储空间,空间的大小是用字节作为单位来表示的,如下代码片段所示,申请独立存储空间增加到5M:

Code


当我们试图增加空间大小时浏览器将会弹出一个确认对话框,供我们确认是否允许增加独立存储的空间大小。

 附件: 您所在的用户组无法下载或查看附件


文件被存往何处

既然独立独立存储是存放在客户端本地,那到底存放在何处呢?在我个人计算机上的地址为:C:\Users\TerryLee\AppData\LocalLow\Microsoft\Silverlight\is\035kq51b.2q4\pksdhgue.3rx\1,不同机器会有一些变化,另外在XP下的存储位置与Vista是不相同的。在g文件夹下面,我们找到当前应用程序的一些公有信息,可以看到有如下三个文件:

 附件: 您所在的用户组无法下载或查看附件


id.dat记录了当前应用程序的ID

quota.dat记录了当前应用程序独立存储的配额,即存储空间大小

used.dat记录已经使用的空间

在另一个s文件夹下可以找到我们创建的目录以及文件,并且可以打开文件来看到存储的内容,如下图所示:

 附件: 您所在的用户组无法下载或查看附件


禁用独立存储

现在我们来思考一个问题,既然独立存储是一个与Cookie机制类似的局部信任机制,我们是否也可以禁用独立存储呢?答案自然是肯定的。在Silverlight应用程序上点击右键时,选择Silverlight Configuration菜单,将会看到如下窗口:

 附件: 您所在的用户组无法下载或查看附件


在这里我们可以看到每一个应用程序存储空间的大小以及当前使用的空间;可以删除应用程序独立存储数据或者禁用独立存储的功能。

独立存储配置最后在简单说一下独立存储配置,在Beta 1时代是应用程序配置,现在不仅支持应用程序配置,同时还支持站点配置,我们可以用它来存储应用程序配置如每个页面显示的图片数量,页面布局自定义配置等等,使用IsolatedStorageSettings类来实现,该类在设计时使用了字典来存储名-值对,它的使用相当简单:

Code


独立存储配置的机制与我们上面讲的一样,它也是基于本地文件存储,系统默认的会创建一个名为__LocalSettings的文件进行存储,如下图所示:

 附件: 您所在的用户组无法下载或查看附件


打开文件后可以看到,存储的内容(此处进行了整理)

Code


值得一提的是使用独立存储配置不仅仅可以存储简单类型的数据,也可以存储我们自定义类型的数据。

小结

本文详细介绍了Silverlight 2中的独立存储机制,希望对大家有所帮助。

示例下载:
 附件: 您所在的用户组无法下载或查看附件
1
查看完整版本: 详解Silverlight 2中的独立存储(Isolated Storage)
Modify by pin5i DZNT_ExpandPackage 2.1.3237 2007-2008 pin5i.com
  Total Unique Visitors: