哪种“符号链接”?;-)
哦,阅读上面的符号链接维基百科文章以了解mklink
命令;-) 反引号(或系统)可以成为好朋友,但请注意:
Windows Vista/Windows 7中的默认安全设置禁止非提升管理员和所有非管理员创建符号链接。这种行为可以通过[安全策略设置]更改....
编程愉快。
WinAPI的CreateSymbolicLink函数可能可以直接使用;我不确定它是否会像上面的mklink
命令一样受到相同的限制。然而,这个线程表明它仍然有效。
就我所知,在草莓Perl 5.12中,这个“可以工作”。你的情况可能有所不同,我只是打了这个代码,从未使用过其他方式:-)
use Win32::API;
$fn = Win32::API->new(
"kernel32", "BOOLEAN CreateSymbolicLinkA(LPTSTR lpSymlinkFileName, LPTSTR lpTargetFileName, DWORD flags)"
);
unlink("src.txt");
unlink("lnk.txt");
open(FH,">src.txt") or die $!;
close(FH);
print "src.txt exists? " , (-f "src.txt"), "\n";
print "lnk.txt exists? " , (-f "lnk.txt"), "\n";
$hr = $fn->Call("lnk.txt", "src.txt", 0);
print "Result: ", $hr, "\n";
print "lnk.txt exists? ", (-f "lnk.txt"), "\n";
open(FH,">>src.txt") or die $!;
print FH "hello world!\n";
close(FH);
open(FH,"<lnk.txt") or die $!;
print "linked data: ", scalar(<FH>), "\n";
close(FH);
我的结果(以“管理员”身份运行--可能不适用于“其他用户”--我不知道为什么,但我的cmd.exe总是以提升的权限打开):
src.txt存在吗?1
lnk.txt存在吗?
结果:
lnk.txt存在吗?1
链接数据:hello world!
目录列表:
10/22/2011 02:53 PM <DIR> .
10/22/2011 02:53 PM <DIR> ..
10/22/2011 02:54 PM 636 foo.pl
10/22/2011 02:53 PM <SYMLINK> lnk.txt [src.txt]
10/22/2011 02:53 PM 14 src.txt
我不知道NTFS符号链接和“UNIX”符号链接之间是否存在[微妙]差异。此外,上述内容在Vista / 2008之前不起作用——NTFS的早期版本不支持符号链接(以及Windows的早期版本没有CreateSymbolicLink
函数)。
symlink
将失败。 - Brian Roach