熟练使用NTFS的文件链接技术

时间:2023-06-25 08:13:32

硬链接和软链接介绍:

硬连接指向的是i节点(iNode),而软连接指向的是路径(Path) ,又称符号链接。
硬链接可理解为对i节点的引用,最初的文件名与所有的硬链接地位是对等的,比如为文件a建立了硬链接b、c、d。那么a、b、c、d之中只要有一个文件未删除,这个文件就可通过未删除的名称访问的。你也可以认为每个文件都可认为至少有一个硬链接,就是说a也是一个硬链接。

软链接特性上有些类似于快捷方式,比如为原文件a建立了软链接b、c、d。删除b、c 或d访问到a,但是只要删除了a,软链接就不可用了。但是Windows下的快捷方式只能在资源管理器中有用,它只是一个.lnk文件。如果是一个目录的快捷方式,它是不能通过cd命令或路径进入的。

硬链接文件有两个限制(Unix/Linux和Windows均如此):
1、不允许给目录创建硬链接;
2、只有在同一文件系统中的文件之间才能创建链接。

本文的内容关键在Windows下如何建立软硬链接。
熟悉过Unix/Linux都应该知道,Unix/Linux用ln建立硬链接,ln -s建立软链接,那么Windows下是如何做的呢?

xp和win7采用不同的方式,其中xp方式如下: 

一、只能适用于NTFS文件系统;

1)使用命令fsutil hardlink创建硬链接;

语法:
fsutil hardlink create NewFileName ExistingFileName

参数:
create 建立现有文件和新文件之间的NTFS硬链接。NTFS硬链接与POSIX硬链接相似;
NewFileName 指定要将创建硬链接的文件;
ExistingFileName 指定要从中创建硬链接的文件。

如果你想在自己的程序里创建硬链接,那也是很容易的,只需要一个很简单的Win32 API函数:

 BOOL CreateHardLink(
LPCTSTR lpFileName, // link name name
LPCTSTR lpExistingFileName, // target file name
LPSECURITY_ATTRIBUTES lpSecurityAttributes
);

2)使用junction外部命令创建软链接。

NTFS只支持对目录的软链接,微软把它称作junction。但是对于文件的软链接,微软也有提供了类似的解决方案,那就是快捷方式(Shortcut/.lnk文件)。不过软链接和快捷方式不是一个层次上的东西,前者是底层文件系统的功能,后者是应用层的功能。在http://technet.microsoft.com/en-us/sysinternals/bb896768.aspx下载junction.exe。

junction的命令语法是:
junction LinkDirectory ExistingDirectory

例如:junction D:\link C:\windows
将为C:\windows建立一个链接目录D:\link,C和D分区都要是NTFS格式,在资源管理器和dir显示中D:\link都以目录的形式存在的。D:\link就像是C:\windows的一个引用一般,删除 D:\link目录中的内容也就是删除了D:\windows中的内容,但删除D:\link本身是不会影响到C:\windows的。

相应的,在程序中也有一个API函数CreateSymbolicLink支持创建软链接,不过来得太晚了,要在Windows Vista和Windows Server 2008上才支持,先还是别想了。API原型是:

 BOOL WINAPI CreateSymbolicLink(
__in LPCWSTR lpSymlinkFileName,
__in LPCWSTR lpTargetFileName,
__in DWORD dwFlags
);

参数:
lpSymlinkFileName 要创建的符号链接名称;
lpTargetFileName 符号链接所对应目标的名称;
dwFlags 标识目标是文件还是目录,取值0x0代表是文件,SYMBOLIC_LINK_FLAG_DIRECTORY或0x1代表是目录。

二、借助于更为方便的工具。

使用LinkShellExtension右键扩展工具:http://t.cn/8s0ssLt(xp汉化版本)

熟练使用NTFS的文件链接技术熟练使用NTFS的文件链接技术熟练使用NTFS的文件链接技术

Win7中的方法:

一、使用mklink命令;

熟练使用NTFS的文件链接技术

二、也可使用LinkShellExtension win7版本,用户可google下载。