如何在NTFS文件系统中创建文件的Link

大部分朋友可能知道UNIX提供了创建文件的Link的功能,而用过WindowsNTFS文件系统所支持的Link功能的朋友可能就没有那么多了(注意我说的不是Shortcut)。今天正好由于工作原因研究了一下相关内容,整理一下分享出来。本文简单介绍如何在Windows系统中使用NTFS文件系统所提供的功能创建LinkNTFS支持两种LinkJunction PointHard Link

Junction Point

Junction PointNTFS文件系统中Reparse Point的一种类型,支持对Folder的链接。

创建junction point可以使用Sysinternals所提供的Junction.exe工具来创建,其命令格式为:

 

junction <link> <target>

 

 

Sysinternals工具可以在http://www.microsoft.com/technet/sysinternals/default.mspx 下载)

比如我们可以创建一个对于C:/tempLink,名为C:/Link_Temp

C:/>junction C:/Link_Temp C:/temp

 

Junction v1.03 - Win2K junction creator and reparse point viewer

Copyright (C) 2000-2002 Mark Russinovich

Systems Internals - http://www.sysinternals.com

 

Created: C:/Link_Temp

Targetted at: C:/temp

 

那么,就可以像普通Folder一样的对Link_Temp进行操作了:

C:/>dir C:/link_Temp

 Volume in drive C is Vista

 Volume Serial Number is 0C8F-86E1

 

 Directory of C:/link_Temp

 

07/15/2007  11:48 AM    <DIR>          .

07/15/2007  11:48 AM    <DIR>          ..

显然Shortcut是做不到这一点的。

如果我们不需要这个Link了,可以随时键入rmdir C:/link_temp来删除这个Link,即使C:/Temp不为空。

关于Conjunction Point的详细内容可以参看:http://en.wikipedia.org/wiki/NTFS_junction_point

Windows 2000 Resource Kit中也提供了一个类似工具用于创建Conjunction Point,可以参考下面这篇文章:

http://msdn2.microsoft.com/en-us/library/aa363878.aspx

Windows Vista上提供了更强大的Symbolic Link功能,对文件也可以使用,具体可以参看:

http://msdn2.microsoft.com/en-us/library/aa363878.aspx

 

Hard Link

 

Hard LinkConjunction Point不同的地方在于,Hard Link类似对实际文件内容的一个Reference,有几个不同的文件名对其引用那么就存在几个Reference。当所有的Reference都被删除的时候,文件内容则被删除。可以把通常情况下的文件名认为是Hard Link的一种特殊形式,即只有一个File Name引用实际的文件内容。任何对所有引用的文件名的操作都会改变文件内容。

创建Hard Link可以通过fsutil(在XP/2003/Vista上存在)来创建,格式如下:

 

fsutil hardlink create <link> <target>

 

 

C:/>fsutil hardlink create test_1.txt test.txt

Hardlink created for C:/test_1.txt <<===>> C:/test.txt

 

C:/>fsutil hardlink create test_2.txt test.txt

Hardlink created for C:/test_2.txt <<===>> C:/test.txt

 

C:/>fsutil hardlink create test_1.txt test.txt

Hardlink created for C:/test_1.txt <<===>> C:/test.txt

 

C:/>fsutil hardlink create test_2.txt test.txt

Hardlink created for C:/test_2.txt <<===>> C:/test.txt

 

大家可以自己试验一下,看删掉原来文件test.txt之后,test_1.txttest_2.txt是否还存在,内容是否还存在。答案是肯定的。

关于Hard Link的具体内容可以参看:http://en.wikipedia.org/wiki/Hard_link

 

 

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NTFS文件系统,每一个文件或目录都拥有一个MFT记录,MFT记录记录了文件或目录的基本信息,对于普通文件来说,一般拥有文件序号,文件名,创建时间,文件大小,文件属性,文件数据地址索引等基本文件信息,而一个目录除了拥有基本文件信息,还拥有其目录下的文件索引项信息,文件与其父目录之间通过该文件的MFT记录的父目录信息和目录的索引项来建立隶属关系,这两种信息唯一地确定了文件与父目录之间的对应关系,由此可知,要在一个指定目录下生成一个文件,除了要创建目标文件本身的MFT记录,还需在其父目录的MFT记录或者其索引分配建立目标文件的索引。在NTFS系统,文件索引是一个比较复杂的内容,文件的索引采用了树型结构,这给NTFS系统带来了查找文件速度快的优点,但却给当索引结点增加或减少时,如何维护树的平衡带来了难题。在NTFS系统,小目录的索引直接存放在目录本身MFT记录的90H属性,而大目录的索引则需另外开辟新的索引分配区来存放相关的索引。原程序只考虑了小目录的情况,即将文件的索引直接存放在90H属性,并不考虑大目录的索引情况。除此之外,NTFS系统对于每一个文件操作都会写入日志文件,以便一致性检查,但由于这方面的内容尚未研究清楚,本程序也未涉及这方面的内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值