硬连接

来源:互联网 发布:网络打鱼机上分作弊器 编辑:程序博客网 时间:2024/04/19 04:10

硬连接

你知道关于快捷方式—也就是那些little .lnk文件,它们大多数分散在你的桌面上,你使用他们去调用一些其他的东西?毫无疑问,快捷方式是一个非常有用的特性,但是它们也有一些缺点.首先,如果你有多个快捷方式指向不同文件夹中的同一个目标,实际上你有同样的多个拷贝,幸运的是文件还是比较小的.更重要的是,快捷方式的目标对象过一段时间可能改变.它可能被移动,删除或是简单的重命名了.那你的快捷方式怎么样?他们是否能够检查到这些变化,并且跟踪它们,(自动)进行适当的升级?不幸的是,他们不能.这个问题的主要的原因是快捷方式的一个应用级特性.从系统的观点来看,它们只是用户定义的文件,当你试图打开它们的时候,只需要一些额外的工作.作为一个快捷方式,是一种你可以决定分配给其他的文件类的特权.除非它有意义,否则你可以创建你自己的除了扩展名为.lnk的类以外的快捷方式.所需要做的就是在注册表的入口类节点下命名IsShortcut.假设你想要把.xyz的文件作为快捷方式,在 HKEY_CLASSES_ROOT下创建一个.xyz的节点注册文件类,并且使它指向另一个节点,通常是xyzfile.然后加一个空的REG_SZ入口:

HKEY_CLASSES_ROOT/xyzfile

这样就完成了.

其他的操作系统,特别是Posix 和 OS/2,有一个相似的特点,那就是运行在系统级.特别是OS/2,把它们叫做shadows.一个硬连接是一个特定文件的文件系统级的快捷方式.通过创建一个已经存在的文件的硬连接,你既没有复制文件,也没有复制以文件为基础的参考信息(也就是说,快捷方式).然而,你在它的目录的入口添加了NTFS级的信息.物理文件仍完好地保存在它的原始位置.简单的说,现在可以通过两个或更多的名字访问同样的内容.

一个硬连接通过保存一个文件的多个副本来挽救了你,使得系统负责管理指向一个物理内容的各种路径名.这很大程度上简化了你的工作,节约了宝贵的磁盘空间.不仅如此,硬连接作为一个系统级的快捷方式,总是指向特定的目标文件,不论你是否重命名或者是移动了他.因为连接存在于所有的文件系统级,所有的变化自动的和明确的应用它.硬连接必须在同一个NTFS卷中创建.比如说,你不能有硬连接从drive C:指向drive D:的一个文件.

如果想要听起来更熟悉,不妨把硬连接想象成一个文件的别名.你可以使用任何别名去访问它,并且只有当它的所有的别名都被删掉后,该文件才被删掉.因为硬连接是别名,同步的内容是简单的工作。

CreateHardLink()是用来创建硬连接的API函数.它的原型如下:

BOOL CreateHardLink(  LPCTSTR lpFileName,                            LPCTSTR lpExistingFileName,                 LPSECURITY_ATTRIBUTES lpSecurityAttributes  ); 

作为老的MIND的文章的伙伴代码,(参看"Windows 2000 for Web Developers," MIND, March 1999),我提供了一个COM对象,允许你用script代码创建硬连接.代码实例2展示了一个VBScript的程序,它实现了为一个文件创建硬连接的功能.而且很容易发现一个文件有多少个硬连接,把他们全部列举出来并没有什么实际价值.API的函数GetFileInformationByHandle() 填充了 BY_HANDLE_FILE_INFORMATION结构,它的 nNumberOfLinks 域中提示你有关信息.列举所有的连接文件的名字有一些困难.基本上,你必须扫描整个的卷,对每一个文件明确分配给它的特有的ID,并跟踪它.当你运行到一个存在的ID时,你会发现那个文件的硬连接.文件特有的ID是由系统分配的,存储在BY_HANDLE_FILE_INFORMATION 的 nFileIndexHigh和nFileIndexLow中.

原创粉丝点击