windows 2003 resource kit tools中提供了很多不错的工具,其中的linkd可以实现文件夹硬链接(或者说是文件夹挂载,不好意思没法准确描述)的功能,我对它的实现很感兴趣,可始终猜不透它到底是怎么实现的。
不错ntfs的确可以实现卷的挂载,但对与普通文件夹该怎么处理?
兄弟能否提供个思路,介绍个api也是好的。

解决方案 »

  1.   

    Hard Links and Junctions
    http://msdn.microsoft.com/en-us/library/aa365006(VS.85).aspx
      

  2.   

    谢谢!
    不过我看那个函数还是没有办法对目录进行操作。BOOL WINAPI CreateHardLink(
      __in        LPCTSTR lpFileName,
      __in        LPCTSTR lpExistingFileName,
      __reserved  LPSECURITY_ATTRIBUTES lpSecurityAttributes
    );
    Parameters
    lpFileName [in] 
    The name of the new file. This parameter cannot specify the name of a directory.lpExistingFileName [in] 
    The name of the existing file. This parameter cannot specify the name of a directory.lpSecurityAttributes 
    Reserved; must be NULL.
      

  3.   

    花了一个下午总算是清除了ntfs硬链接的意思,虽然结论令人沮丧。1.ntfs支持文件的硬链接和软连接(符号连接),软连接可以使文件或文件夹,硬链接只允许文件。
    道理很简单,加入文件夹可以硬链接,a和b目录下一个一个文件夹c和d,a\c->b,b/d->a,那文件夹就乱套了,任何一个文件和文件夹只允许一个父目录,所以目录的硬链接是不可能的。linux下也一样道理。2.windows resources kit tools提供的link和sysinternal提供的junction都是对文件夹的软链接。但有两个限制:
        1.路径是ASCII;
        2.源文件夹所在卷文件系统是ntfs;
        3.源目录必须为空。
    可惜都没有办法弄到它们的源代码,软链接微软居然也不给出应用层的接口。windows vista和windows 2008有一个针对文件的软链接函数(不是快捷方式)
    BOOL WINAPI CreateSymbolicLink(
      __in  LPCWSTR lpSymlinkFileName,
      __in  LPCWSTR lpTargetFileName,
      __in  DWORD dwFlags
    );回帖给分!