独立存储

独立存储是一种数据存储机制,它在代码与保存的数据之间定义了标准化的关联方式,从而提供隔离性和安全性。 同时,标准化也提供了其他好处。 管理员可以使用旨在操作独立存储的工具来配置文件存储空间、设置安全策略及删除未使用的数据。 通过独立存储,代码不再需要使用唯一的路径来指定文件系统中的安全位置,同时可以保护数据免遭只具有独立存储访问权限的其他应用程序的损坏。 不再需要指示应用程序的存储区域位置的硬编码信息。

本主题包含以下各节:

  • 数据隔离舱和存储区

  • 安全访问

  • 独立存储位置

  • 创建、枚举和删除独立存储

  • 独立存储的情况

  • 相关主题

  • 参考

数据隔离舱和存储区

当应用程序在文件中存储数据时,必须仔细选择文件名和存储位置,最大程度地减小其他应用程序知道该存储位置的可能性,从而使数据不易受到损坏。 如果没有标准的系统来处理这些问题,想开发出最大程度地减少存储冲突的特别技术可能并非易事,而且开发出来的技术也不见得可靠。

通过使用独立存储,数据将始终按用户和程序集进行隔离。 程序集的源或强名称等凭据确定程序集的身份。 通过使用类似的凭据,数据还可以按应用程序域进行隔离。

当使用独立存储时,应用程序将数据保存到一个与代码标识的某些方面(例如发行者或签名)相关联的独特数据隔离舱。 数据隔离舱是一个抽象的存储位置,而不是具体的存储位置,它由一个或多个独立的存储文件(叫做存储区)组成,这些独立的存储文件包含存储数据的实际目录位置。 例如,应用程序可能有一个与其关联的数据隔离舱,文件系统中的某个目录将实现实际保留应用程序数据的存储区。 保存在存储区中的数据可以是任意类型的数据,无论是用户首选项信息还是应用程序状态都可以。 对于开发人员,数据隔离舱的位置是透明的;存储区通常驻留在客户端,但服务器应用程序可以通过模拟它所服务的用户来使用独立存储区存储信息。 独立存储还可以将信息和用户漫游配置文件一起存储在服务器上,这样,漫游用户就可以随时使用该信息。

返回页首

安全访问

通过使用独立存储,可以使部分受信任的应用程序以由计算机安全策略控制的方式存储数据。 对于用户需慎重运行的下载的组件来说,这尤为有用。 安全策略很少向这种代码授予使用标准 I/O 机制访问文件系统的权限, 但是默认情况下,会对在本地计算机、本地网络或 Internet 中运行的代码授予使用独立存储的权限。

管理员可以根据适当的信任级别限制应用程序或用户可以使用多少独立存储。 另外,管理员可以完全移除用户的持久性数据。 若要创建或访问独立存储,则必须授予代码相应的 IsolatedStorageFilePermission

要访问独立存储,代码必须具有所有必要的本机平台操作系统权限。 例如,在 Windows 2000 上必须满足访问控制列表 (ACL),该列表控制哪些用户具有使用文件系统的权限。 除非执行(特定于平台的)模拟,否则 .NET Framework 应用程序已经具有访问独立存储的操作系统权限。 在这种情况下,应用程序负责确保被模拟的用户标识具有访问独立存储的适当操作系统权限。 对于在 Web 上运行或从 Web 下载的代码而言,这种访问为之提供了一种读写与特定用户相关的存储区域的简便方法。

返回页首

独立存储位置

有时候,使用操作系统的文件系统来验证对独立存储进行的更改会非常有帮助。 开发人员可能还需要了解独立存储文件的位置。 该位置随操作系统的不同而不同。 下表显示了在几个常见操作系统上创建独立存储的根位置。 在此根位置下查找 Microsoft\IsolatedStorage 目录。 您必须更改文件夹设置以显示隐藏文件和文件夹,才能查看到文件系统中的独立存储。

操作系统

在文件系统中的位置

Windows 98、Windows Me - 未启用用户配置文件

支持漫游的存储区 =

<SYSTEMROOT>\Application Data

非漫游存储区 = WINDOWS\Local Settings\Application Data

Windows 98、Windows Me - 启用了用户配置文件

支持漫游的存储区 =

<SYSTEMROOT>\Profiles\<用户>\Application Data

非漫游存储区 = Windows\Local Settings\Application Data

Windows NT 4.0

<SYSTEMROOT>\Profiles\<用户>\Application Data

Windows NT 4.0 - Service Pack 4

支持漫游的存储区 =

<SYSTEMROOT>\Profiles\<用户>\Application Data

非漫游存储区 =

<SYSTEMROOT>\Profiles\<用户>\Local Settings\Application Data

Windows 2000、Windows XP、Windows Server 2003 - 从 Windows NT 4.0 升级

支持漫游的存储区 =

<SYSTEMROOT>\Profiles\<用户>\Application Data

非漫游存储区 =

<SYSTEMROOT>\Profiles\<用户>\Local Settings\Application Data

Windows 2000 - 全新安装(和从 Windows 98 及 Windows NT 3.51 升级)

支持漫游的存储区 =

<SYSTEMDRIVE>\Documents and Settings\<用户>\Application Data

非漫游存储区 =

<SYSTEMDRIVE>\Documents and Settings\<用户>\Local Settings\Application Data

Windows XP、Windows Server 2003 - 全新安装(和从 Windows 2000 及 Windows 98 升级)

支持漫游的存储区 =

<SYSTEMDRIVE>\Documents and Settings\<用户>\Application Data

非漫游存储区 =

<SYSTEMDRIVE>\Documents and Settings\<用户>\Local Settings\Application Data

Windows Vista

支持漫游的存储区 =

<SYSTEMDRIVE>\Users\<用户>\AppData\Roaming

非漫游存储区 =

<SYSTEMDRIVE>\Users\<用户>\AppData\Local

返回页首

创建、枚举和删除独立存储

提供了三个主要的类来帮助您执行涉及独立存储的任务:

独立存储类使您可以创建、枚举并删除独立存储。 通过 IsolatedStorageFile 对象可以使用执行这些任务的方法。 某些操作要求您具有 IsolatedStorageFilePermission(它表示管理独立存储的权限);您可能还需要具有访问文件或目录的操作系统权限。 在 Microsoft Windows NT、Microsoft Windows 2000、Windows XP 和 Windows Vista 上,文件上的访问控制列表 (ACL) 设置可以防止您访问独立存储。 独立存储工具 Storeadm.exe 也可以用于简单的存储区管理,例如列出或删除当前用户的所有存储区。

有关演示常见的独立存储任务的一系列示例,请参见相关主题中列出的帮助主题。 每个示例都有一个源文件,用以阐释一项特定任务。 每个示例的主页上都包含有安装、编译和运行的指导说明。 这些示例仅以 C# 的形式提供。

返回页首

独立存储的情况

独立存储可用于许多情况。 以下介绍了五种最典型的情况:

  • 下载的控件。 不允许从 Internet 下载的托管代码控件通过正常的 I/O 类写入硬盘,但它们可以使用独立存储来持久保存用户设置和应用程序状态。

  • 共享组件存储。 应用程序间共享的组件可以使用独立存储来提供对数据存储区的有控制的访问。

  • 服务器存储。 服务器应用程序可以使用独立存储为请求应用程序的大量用户提供单独的存储区。 因为独立存储始终按用户进行隔离,所以服务器必须模拟发出请求的用户。 在这种情况下,根据主体的标识隔离数据,该标识与应用程序用来区分其用户的标识是同一个标识。

  • 漫游。 应用程序还可以将独立存储和漫游用户配置文件一起使用。 这允许用户的独立存储区和配置文件一起漫游。

虽然独立存储非常适合于以上所述的情况,但在少数情况下,您“不”应该使用独立存储:

  • 不要使用独立存储来存储重要机密(例如不加密的密钥或密码),因为独立存储对高度受信任的代码、非托管代码或计算机的受信任用户不设防。

  • 不要使用独立存储来存储代码。

  • 不要使用独立存储来存储配置和部署设置,它们是由管理员来控制的。 (因为管理员不控制用户首选项,所以用户首选项不被认为是配置设置。)

当今的许多应用程序都使用数据库来存储和隔离数据,在这种情况下,数据库中的一个或多个行可能代表某个特定用户的存储。 当用户数较少时、当使用数据库的系统开销非常大时或当不存在数据库功能时,您可以选择使用独立存储而不使用数据库。 另外,当应用程序要求比数据库的行所提供的存储更加灵活和复杂的存储时,独立存储也可以提供一个可行的替代方案。

返回页首

相关主题

标题

说明

隔离的类型

描述不同类型的隔离。

如何:获取独立存储的存储区

提供使用 IsolatedStorageFile 类获取按用户和程序集隔离的存储区的示例。

如何:枚举独立存储的存储区

演示如何使用 IsolatedStorageFile.GetEnumerator 方法计算用户的所有独立存储的大小。

如何:删除独立存储中的存储区

演示如何使用 IsolatedStorageFile.Remove 方法以两种不同方式删除独立存储区。

如何:预见独立存储中的空间不足条件

说明如何测量独立存储区中剩余的空间。

如何:在独立存储中创建文件和目录

提供一些在独立存储区中创建文件和目录的示例。

如何:在独立存储中查找现有文件和目录

演示如何读取独立存储区中的目录结构和文件。

如何:在独立存储中读取和写入文件

提供一个向 IsolatedStorageFile 写入字符串并将其读取回的示例。

如何:在独立存储中删除文件和目录

演示如何删除独立存储文件和目录。

文件和流 I/O

解释如何执行同步和异步文件和数据流访问。

返回页首

参考

System.IO.IsolatedStorage.IsolatedStorage