zoukankan      html  css  js  c++  java
  • 熟练使用NTFS的文件链接技术

    硬链接和软链接介绍:

    硬连接指向的是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函数:

    1 BOOL CreateHardLink(
    2   LPCTSTR lpFileName,                         // link name name
    3   LPCTSTR lpExistingFileName,                 // target file name
    4   LPSECURITY_ATTRIBUTES lpSecurityAttributes  
    5 );

    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原型是:

    1 BOOL WINAPI CreateSymbolicLink(
    2   __in  LPCWSTR lpSymlinkFileName,
    3   __in  LPCWSTR lpTargetFileName,
    4   __in  DWORD dwFlags
    5 );

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

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

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

    Win7中的方法:

    一、使用mklink命令;

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

  • 相关阅读:
    徐丽君 20191017-1 每周例行报告
    徐丽君 20191010-2 每周例行报告
    徐丽君 20190919-1 每周例行报告
    徐丽君 20190919-4 单元测试结对
    20191128-1 总结
    20191121-1 每周例行报告
    20191114-1 每周例行报告
    20191107-1 每周例行报告
    20191031-1 每周例行报告
    20191024-1 每周例行报告
  • 原文地址:https://www.cnblogs.com/cpper-kaixuan/p/3532227.html
Copyright © 2011-2022 走看看