使用 .NET的IO(4)

原创 2002年04月17日 09:02:00

获得存储区<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

存储区公开数据舱中的虚文件系统。IsolatedStorageFile 提供了许多与存储区进行交互的方法。要创建和检索存储区,IsolatedStorageFile 提供了三种静态方法。调用 GetUserStoreForAssembly 或 GetUserStoreForDomain 分别返回按用户和程序集隔离及按用户、域和程序集隔离的存储。这两种方法检索属于代码块(是从该代码块中调用这两种方法的)的存储区。静态方法 GetStore 返回独立存储区,该存储区是通过传入范围参数组合指定的。下面的参数返回一个按用户、程序集和域隔离的存储区。

GetStore 方法可以用于指定存储区应该和漫游用户配置文件一起漫游。

默认情况下,从不同的程序集中获得的独立存储区是不同的。您可以访问不同程序集或域的存储区,方法是传入不同的程序集或域证据作为 GetStore 方法的最后两个参数。这需要访问按应用程序域标识隔离的独立存储的权限。有关更多信息,请参阅 GetStore 方法。有关程序集的更多信息,请参阅程序集。

三种方法中的每种方法都返回 IsolatedStorageFile 对象。一旦具有了独立存储文件对象之后,您便可以使用独立存储方法来读取、写入、创建和删除文件及文件目录了。

没有防止代码向没有足够访问权限来自己获取存储区的代码传递 IsolatedStorageFile 的机制。只有当获得对 IsolatedStorage 对象的引用时(通常是在 GetUserStoreForAssemblyGetUserStoreForDomain GetStore 方法中),才检查域和程序集标识及独立存储权限。因此,使用这些引用的代码应该保护对 IsolatedStorageFile 对象的引用。

ObtainingAStore 示例

下面的代码示例是一个非常简单的由类获得按用户和程序集隔离的存储区的示例。通过向 GetStore 方法传递的参数添加 IsolatedStorageScope.Domain,此代码可被更改用来检索按用户、域和程序集隔离的存储区。

运行代码之后,您可以通过在命令行键入 StoreAdm /LIST 来确认已创建了存储区。这将运行独立存储管理工具 (Storeadm.exe) 并列出用户当前所有的独立存储区。

枚举存储区

您可以使用 IsolatedStorageFile 静态方法 GetEnumerator 枚举当前用户的所有独立存储区。GetEnumerator 取 IsolatedStorageScope 值并返回 IsolatedStorageFile 枚举数。User 是唯一受支持的 IsolatedStorageScope 值。要枚举存储区,您必须具有指定 IsolatedStorageContainment 值 AdministerIsolatedStorageByUser的 IsolatedStorageFilePermission。当使用 IsolatedStorageScopeUser 进行调用时,GetEnumerator 返回为当前用户定义的 IsolatedStorageFiles 数组。

EnumeratingStores 示例

下面的代码示例获得按用户和程序集隔离的存储区并创建几个文件。调用 GetEnumerator 方法并将结果放入 IEnumerator。然后代码依次通过 IEnumerator,添加文件的大小,并将结果报告给控制台。实际枚举发生在私有 EnumerateTheStore 方法中,为了清楚起见,将该方法与代码的其他部分分开,放在文件的底部。

删除存储区

IsolatedStorageFile 提供了两种删除独立存储文件的方法:

  • 实例方法 Remove 不取任何参数,删除调用它的存储区。该操作不需要任何权限。可以访问存储区的任何代码都可以删除该存储区中的任何数据或所有数据。

  • 静态方法 Remove 采用 IsolatedStorageScope User,并删除运行该代码的用户的所有存储区。该操作需要 IsolatedStorageContainment AdministerIsolatedStorageByUser IsolatedStorageFilePermission 权限。

DeletingStores 示例

下面的代码示例演示了静态和实例 Remove 方法的使用。类获得两个存储区,一个按用户和程序集隔离;另一个按用户、域和程序集隔离。通过调用 IsolatedStorageFile isoStore1Remove 方法删除用户、域和程序集存储区。然后,通过调用静态方法 IsolatedStorageFile.Remove 删除该用户所有剩余的存储区。

预见空间不足的情况

使用独立存储的代码受配额的限制,该配额指定独立存储文件和目录所在的数据舱的最大大小。该值由安全策略确定,管理员可以对其进行配置。如果试图写入数据时超过了所允许的最大大小,将引发 IsolatedStorageException,并使操作失败。这有助于防止恶意的抵制服务攻击,受到这种攻击后会因为数据存储被填满而导致应用程序拒绝请求。为了帮助您确定给定的写入尝试是否会因为此原因而失败,独立存储提供了两个只读属性:IsolatedStorage.CurrentSize 和 IsolatedStorage.MaximumSize。这两个属性可用于确定写入存储区是否将导致超过存储区所允许的最大大小。当您使用这些属性时,请记住独立存储可能被同时访问;因此,如果您计算的存储量有剩余,则该存储空间可能在您试图写入存储区时已被使用。但是,这不会妨碍您使用存储区的最大大小来确定是否将达到可用存储的上限。

另一个重要的考虑是最大大小属性取决于来自正常工作的程序集的证据。因此,只应该对使用 GetUserStoreForAssembly()、GetUserStoreForDomain() 或 GetStore() 创建的 IsolatedStorageFile 对象调用此方法。以其他任何方式(例如从 GetEnumerator() 中返回)创建的 IsolatedStorageFile 对象将无法返回准确的最大大小。

AnticipatingOutOfSpaceConditions 示例

下面的代码示例获得一个独立存储区,创建几个文件并度量存储区中剩余的空间。以字节数报告剩余的空间。

创建文件和目录

获得存储区之后,您可以创建用于存储数据的目录和文件。在存储区中,文件名和目录名是相对于虚文件系统的根目录指定的。

要创建目录,请使用 IsolatedStorageFile 的 CreateDirectory 实例方法。如果您指定一个未创建目录的子目录,则会同时创建两个目录。如果您指定一个已存在的目录,将不会生成任何异常。但是,如果您指定一个包含无效字符的目录名称,则会生成 IsolatedStorageException。

要创建并打开文件,请使用 IsolatedStorageFileStream 构造函数之一,传入文件名、FileMode 值 OpenOrCreate 和要在其中创建文件的存储区。然后,您可以在文件流中对数据执行想要执行的操作,例如读取、搜索和写入。IsolatedStorageFileStream 构造函数还可用于为其他目的打开文件。

通过使用任何不取 IsolatedStorageFile 参数的 IsolatedStorageFileStream 构造函数,您还可以在不首先获得存储区的情况下创建或打开文件。当使用这种形式的构造函数时,文件是在该文件的域存储区中创建的。

Windows 文件系统中,为了对名称进行比较,独立存储文件和目录名都不区分大小写。这样,如果您创建了一个名为 ThisFile.txt 的文件,然后又创建了名为 THISFILE.TXT 的另一个文件,实际上只创建了一个文件。显示时,文件名保持其原有的大小写。

CreatingFilesAndDirectories 示例

下面的代码示例阐释如何在独立存储区创建文件和目录。首先,检索一个按用户、域和程序集隔离的存储区并放入 isoStore 变量。CreateDirectory 方法用于设置少数不同的目录,而 IsolatedStorageFileStream 方法在这些目录中创建一些文件。

【caffe-Windows】微软官方caffe之 matlab接口配置

前言 按照微软的官方地址配置可能会出现一个问题caffe_.mexw64找不到引用模块问题,或者在matlab里面压根找不到caffe_这个函数,下面会提到这两个问题。还是按照步骤来吧 【PS1】...
  • ZHE123ZHE123ZHE123
  • ZHE123ZHE123ZHE123
  • 2017年01月05日 22:10
  • 707

C# .Net读写文件 IO流 C# .Net对文件&文件夹操作

通常来讲,用C#程序读取一个文件需要以下5个基本步骤 1:创建文件流 2:创建阅读器或者写入器 3:执行读写操作 4:关闭阅读器或者写入器 5:关闭文件流 (注意事项: 使用文件流需要导入...
  • miniduhua
  • miniduhua
  • 2016年10月21日 15:16
  • 2999

Win10安装.net framework 4.0失败提示已是操作系统一部分如何解决(一)

由余matlab仿真,安装后缺少C编译器,前提必须安装.net framework 4.0,所以想在win10系统电脑中安装microsoft .net framework 4.0。可是在安装过程中却...
  • qq_35409640
  • qq_35409640
  • 2017年11月10日 17:35
  • 1068

仅当使用 Microsoft .NET Framework 4 或更高版本时,才支持对 x64 进程进行混合模式调试

低于 4 的 .NET Framework 版本不支持对 x64 进程进行混合模式调试。 这意味着,当您进行调试时,无法从托管代码单步执行到本机代码,也无法从本机代码单步执行到托管代码。 问...
  • kingmax54212008
  • kingmax54212008
  • 2015年01月06日 15:34
  • 3107

架构设计:系统间通信(4)——IO通信模型和JAVA实践 中篇

系统间通信本来是一个很大的概念,我们首先重通信模型开始讲解。在理解了四种通信模型的工作特点和区别后,对于我们后文介绍搭建在其上的各种通信框架,集成思想都是有益的。 目前常用的IO通信模型包括四种(这...
  • yinwenjie
  • yinwenjie
  • 2015年09月24日 11:25
  • 12739

.NET 并行编程——并行循环

一、并行循环基础1、.NET中含并行for循环也含并行foreach循环,且在并行Linq(PLing)查询语言也是有效。顺序循环执行的过程,是有序的;而并行循环执行的顺序是不可预测的,一些高值的索引...
  • manbufenglin
  • manbufenglin
  • 2013年01月09日 12:05
  • 1255

Linux IO控制命令生成

在驱动程序里, ioctl() 函数上传送的变量 cmd 是应用程序用于区别设备驱动程序请求处理内容的值。cmd除了可区别数字外,还包含有助于处理的几种相应信息。 cmd的大小为 32位,共分 4 个...
  • yangwen123
  • yangwen123
  • 2013年07月15日 09:08
  • 2248

Java中的IO技术使用总结

请尊重他人劳动成果,请勿随意剽窃,转载请注明,谢谢!转载请注明出处:http://blog.csdn.net/evan_man/article/details/51812678          ...
  • evan_man
  • evan_man
  • 2016年07月21日 15:21
  • 2211

使用 .Net Memory Profiler 诊断 .NET 应用内存泄漏(方法与实践)

做过应用诊断与优化的朋友都知道内存泄漏和带来的危害,对这种情况的分析和定位一般会比较困难,尤其在 .NET/Java 应用中,隐式的堆内存管理以及托管对象间纷繁复杂的引用关系,使分析和定位问题更加复杂...
  • formiss
  • formiss
  • 2013年01月16日 10:51
  • 2387

IO流的基本使用

IO流 |--字节流 |--字节输入流 InputStream int read():一次读取一个字节 ...
  • Demome
  • Demome
  • 2016年06月30日 16:37
  • 1241
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用 .NET的IO(4)
举报原因:
原因补充:

(最多只允许输入30个字)