哪種「符號鏈接」? ;-)
哦,並讀取符號鏈接維基百科的文章上面的mklink
命令;-) Back-ticks (or system)可以是一個很好的朋友,但要注意:
的默認安全Windows Vista/Windows 7中的設置不允許未升級的管理員和所有非管理員創建符號鏈接。此行爲可以[通過安全策略設置]更改....
快樂編碼。
WinAPI CreateSymbolicLink函數可以直接使用;我不確定它是否「受到」與上面的mklink
命令相同的限制。但是,this thread表示它仍然有效。
FWIW,這個「工程」在草莓Perl 5.12中。因人而異,我剛纔輸入這件事,從來沒有使用過它,否則:-)
use Win32::API;
$fn = Win32::API->new(
# Note "A" function, IDK how to use Unicdoe
"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);
我的結果(RAN爲「管理員」 - 可能不適用於「其他用戶」工作 - 我不知道爲什麼,但我CMD.EXE總是與提升的權限)打開:
src.txt exists? 1
lnk.txt exists?
Result:
lnk.txt exists? 1
linked data: 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」符號鏈接之間。此外,上述將無法工作 pre-Vista/2008 - 以前版本的NTFS 不支持符號鏈接(並且以前版本的Windows沒有CreateSymbolicLink
函數)。
谷歌搜索'窗口符號鏈接perl'返回很多很多的這方面的信息。簡而言之,就是沒有像windows中* nix那樣的「符號鏈接」。 perl文檔告訴你,如果底層操作系統不支持符號鏈接,'symlink'將失敗。 –
@Brian Roach當然,在過去的5年中發佈的windows版本中......-) – 2011-10-22 21:14:00
@pst - 注意「就像在* nix中」一樣。他們...不一樣。你會認爲activestate會做一些事情而不是失敗,但他們不會。 –