熟练使用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函数:
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汉化版本)
Win7中的方法:
一、使用mklink命令;
二、也可使用LinkShellExtension win7版本,用户可google下载。
熟练使用NTFS的文件链接技术的更多相关文章
- 以程序的方式操纵NTFS的文件权限
Windows NT/2K/XP版本的操作系统都支持NTFS格式的文件系统,这是一个有安全性质的文件系统,你可以通过Windows的资源管理器来设置对每个目录和 文件的用户访问权限.这里我就不对NTF ...
- linux文件链接
我的github,欢迎关注,分享知识与技术 链接:一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法. Linux中包括两种链接:硬链接(HardLink)和软链接(Soft Link), ...
- 前端Demo常用库文件链接
<!doctype html><html><head> <meta charset="UTF-8"> <title>前端 ...
- .net环境下ckeditor与ckfinder中文文件链接乱码的问题
.net环境下ckeditor与ckfinder中文文件链接乱码的问题 将ckfinder.js中的getUrl:function(){return this.folder.getUrl()+enco ...
- Linux链接库四(多个库文件链接顺序问题)
最近在Linux下编程发现一个诡异的现象,就是在链接一个静态库的时候总是报错,类似下面这样的错误: (.text+0x13): undefined reference to `func' 关于unde ...
- 挑战以Dropbox为代表的传统“同步网盘”,Seafile推出“分布式文件同步技术”打造的私有云服务
挑战以Dropbox为代表的传统“同步网盘”,Seafile推出“分布式文件同步技术”打造的私有云服务#36氪开放日# 其他 JasonZheng • 2012-04-07 15:14 来自36氪开放 ...
- Seafile 推出 “分布式文件同步技术” 打造的私有云服务
近两年来 Dropbox 等云储存服务迅速窜红,各大巨头纷纷推出自家的云储存服务(苹果的 iCloud, 微软的 SkyDrive, Google 即将推出的 GDrive),国内也有类似的服务(金山 ...
- 转: linux文件链接(软链接和硬链接)
链接:一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法. Linux中包括两种链接:硬链接(Hard Link)和软链接(Soft Link),软链接又称为符号链接(Symbolic l ...
- Linux文件链接hard link与symbolic link
Linux中文件链接有两种方式,一种是hard link,又称为硬链接:另一种是symbolic link,又称为符号链接.要区分两者的不同要回顾Linux常用的ext2文件系统.这种文件系统使用in ...
随机推荐
- Redis断线重连编码注意事项
应用在Redis重启.网络闪断并恢复正常后,应用必须能够自恢复,下面以Java语言的jedis客户端为例说明: 1.作为发布者 Jedis对象不能作为单例,网络闪断后该Jedis对象无法自恢复.应该每 ...
- 第八十八节,html5+css3pc端固定布局,搜索区,插入大图,搜索框
html5+css3pc端固定布局,搜索区,插入大图,搜索框 设置一个div作为搜索区域 1.宽度为百分之百 2.最小宽度为1263,因为要考虑到手机,等小屏幕缩小后宽度会自适应,导致破坏布局,将最小 ...
- CF 604B More Cowbell#贪心
(- ̄▽ ̄)-* //把最大单独放,然后第二大的和最小的放一起,第三大的和第二小的放一起 //由此类推,求最大值,即为盒的最小值 #include<iostream> #include&l ...
- 3种日志类型,微信付款反馈-->写入txt日志
--> 接收 $GLOBALS["HTTP_RAW_POST_DATA"] ---->xml 反系列化$qr = XML_unserialize( $rowpost ...
- 1、MySql的安装和连接测试并给root用户赋密码
一.mysql数据库的安装 Windows下MySQL的配置 以 MySQL 5.1 免安装版为例, 下载 mysql-noinstall-5.1.69-win32.zip ( 官方下载页: http ...
- 6、Web应用程序中的安全向量 -- customErrors(适当的错误报告和堆栈跟踪)
几乎所有的网站在开发过程中都在web.config文件中设置了特性<customErrors mode="off">. customErrors模式有3个可选的设置项: ...
- inode和文件描述符区别
inode 或i节点是指对文件的索引.如一个系统,所有文件是放在磁盘或flash上,就要编个目录来说明每个文件在什么地方,有什么属性,及大小等.就像书本的目录一样,便于查找和管理.这目录是操作系统需要 ...
- MVC中发生System.Data.Entity.Validation.DbEntityValidationException验证异常的解决方法
发生System.Data.Entity.Validation.DbEntityValidationException这个异常的时候,如果没有用特定的异常类去捕捉,是看不到具体信息的. 通常都是用Sy ...
- java中修饰符及其用法
1. java中的修饰符 a. 权限修饰符 private,默认的,protected,public b. 状态修饰符 static,final c. 抽象修饰符 abstract 2. 类修饰符 p ...
- java基础(1)
class test { static { a=3; //System.out.println(a); } static int a = 1; String b = "ff"; p ...