本文涉及的实例程序
自从1994年以来,一个完全面向对象版本的Microsoft Windows NT的神话一直在流传。Cairo,这个传说中的操作系统的代码的名字,从来没有在Redmond以外的一个实验室实现过。从Cairo开始到现在,它的一些基本思想就常常被介绍。
在Cairo背后的基本思想是:把文件和文件夹看成是对象和对象的集合。文件夹的内容不必受到下层的文件系统存储机制的束缚,你可以把它们作为独立的实体来访问和复制。文件和文件夹对象可以按照方法和属性来说明一个可编程的API,不论是标准的还是由所有者或作者定义的。
然而,我们今天拥有的文件系统是把文件和文件夹注册在一些内部结构中的,
当文件和文件夹在磁盘间移动时,这些内部结构同时被复制。文件和文件夹有一套固定的特性, 但是这些特性对于现代的应用程序来说太少了。作为部分工作区,我们在过去的几年时间里提供了一些技术来给文件和文件夹增加额外的信息。外壳和命名空间的扩展,
桌面初始化文件,文件系统对象以及自动对象模块外壳就是几个例子。然而,所有这些功能只是部分的解决办法。 完全没达到一个重新设计的有组织的Windows文件系统的要点。因为向后兼容性是一个严重的问题,从Microsoft的MS-DOS 2。0版开始到现在。Windows还在使用一个建立在文件分配表(FAT)上的过时的文件系统,即使有一些最近的改进,例如支持高容量的硬盘,FAT仍然是一种相当不完善的存储文件和文件夹信息的方法。
真实世界的几年经验说明我们所受到的最重要的限制与程序员所需要的适当的管理和识别文件的附加信息相关。最近,我被要求尝试得到一个Word文件的真正的创建时的日期。你可能认为这是一个简单的任务,因为创建的日期是一种可以通过一些API函数轻易找到的属性。但这并不完全是正确的。尝试拷贝相同的Word文件在不同的机器上,甚至是在相同的文件夹中,然后比较不同拷贝的创建日期。你会惊奇的发现,它们是不同的。当你拷贝一个文件时,你创建了一个新文件,它的时间戳为创建发生的时间。当你建立一个拷贝的时候,你丢失了那些关于文件最初创建时间的有潜在价值的信息。
幸运的是,一个Word文档在内部的 SummaryInformation
处保留了这些信息。所以在这种情况下,我可以解决这个问题,并成功的满足客户的要求。要是一个Access或者是文本文件的话,我的努力就白费了。
在Windows NT系统中,Microsoft介绍了一个新的文件系统叫做NTFS。其中最显著的特性就是B树结构,它可以加速在一个大的文件夹中对一个文件的恢复,以文件为基础的安全性,日志记录,提高文件系统可恢复性,和比FAT或者FAT32更好的对磁盘空间的利用。(顺便说一下,Windows 2000提供了对FAT卷的完全的支持和访问。)
由于它来源于Windows 3.1,NTFS卷也有另一个经常被低估的特性:它支持一个文件中的多个数据流。在Windows
2000中,流的支持得到了提高, 并且加入了其他一些更便利的特性帮助你进行天衣无缝的文件操作。 让我们看一下来源于Windows 2000 的NTFS的版本,NTFS
2000的主要特性。