小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Windows 下也能創(chuàng)建硬鏈接和符號(hào)(軟)鏈接

 農(nóng)夫子oice 2010-07-19

Windows 下也能創(chuàng)建硬鏈接和符號(hào)(軟)鏈接


原文地址:
首先簡(jiǎn)單理解一下硬鏈接和符號(hào)(軟)鏈接的區(qū)別(此文中的符號(hào)鏈接和軟鏈接指同一概念):

硬連接指向的是節(jié)點(diǎn)(inode),而軟連接指向的是路徑(path) 。

最初的文件名與所有的硬鏈接地位是對(duì)等的,比如為文件 a 建立了硬鏈接 b、c、d。那么a、b、c、d之中只要有一個(gè)文件未刪除,這個(gè)文件就可通未刪除的名稱(chēng)訪(fǎng)問(wèn)的。你也可以認(rèn)為每個(gè)文件都可認(rèn)為至少有一個(gè)硬鏈接,就是說(shuō) a 也是一個(gè)硬鏈接。

軟鏈接特性上有些類(lèi)似于快捷方式,比如為原文件 a 建立了軟鏈接 b、c、d。刪除b、c 或 d 訪(fǎng)問(wèn)到 a,但是只要?jiǎng)h除了 a,軟鏈接就不可用了。但是 windows 下的快捷方式只能在資源管理器中有用,它只是一個(gè) lnk 文件,如果是一個(gè)目錄的快捷方式,它是不能通過(guò) cd 命令或路徑進(jìn)入。

硬鏈接文件有兩個(gè)限制(Unix/Linux 和 Windows 也都如此)

  1、不允許給目錄創(chuàng)建硬鏈接;
  2、只有在同一文件系統(tǒng)中的文件之間才能創(chuàng)建鏈接。

更詳細(xì)區(qū)別請(qǐng)見(jiàn):硬鏈結(jié)和符號(hào)鏈接的區(qū)別 ,具體不多述,本文的內(nèi)容關(guān)鍵在 Windows 下如何建立軟硬鏈接。

熟悉過(guò) Unix/Linux 都應(yīng)該知道,Unix/Linux 用 ln 建立硬鏈接,ln -s 建立軟鏈接,那么 Windows 下是如何做到的呢?

一: Windows 下創(chuàng)建硬鏈接,只能適用于 NTFS 文件系統(tǒng)。使用命令 fsutil hardlink

語(yǔ)法
fsutil hardlink create NewFileName ExistingFileName

參數(shù)
create 建立現(xiàn)有文件和新文件之間的 NTFS 硬鏈接。NTFS 硬鏈接與 POSIX 硬鏈接相似。

NewFileName 指定要將創(chuàng)建硬鏈接的文件。

ExistingFileName 指定要從中創(chuàng)建硬鏈接的文件。

當(dāng)然,如果你想在自己的程序里創(chuàng)建硬鏈接,那也是很容易的,只需要一個(gè)很簡(jiǎn)單的 API 函數(shù):

BOOL CreateHardLink(
LPCTSTR lpFileName,
LPCTSTR lpExistingFileName,
LPSECURITY_ATTRIBUTES lpSecurityAttributes
);

適用于 Win2000 及以上版本的系統(tǒng),前兩個(gè)參數(shù)的意思就不用解釋了,最后一個(gè)參數(shù)的用途暫時(shí)保留,必須為 NULL。

二:Windows 下創(chuàng)建軟鏈接,NTFS 只支持對(duì)目錄的軟鏈接,微軟把它稱(chēng)作 junction。但是對(duì)于文件的軟鏈接,微軟也有提供解決方案,那就是快捷方式(Shortcut,.lnk 文件)。不過(guò)軟鏈接和快捷方式不是一個(gè)層次上的東西,前者是底層文件系統(tǒng)的功能,后者是應(yīng)用層的功能。Windows 下目錄的快捷方式用 dir 看起來(lái)是個(gè)文件。

在 [url]http://www.microsoft.com/technet/sysinternals/FileAndDisk/Junction.mspx[/url] 下載 junction.exe。junction 的命令語(yǔ)是:

junction LinkDirectory ExistingDirectory

例如:junction d:\link c:\winnt

將為c:\winnt 建立一個(gè)鏈接目錄 d:\link,C和D分區(qū)都要是 NTFS 格式,在資源管理器和 dir 列示中 d:\link 都以目錄的面目存在的。d:\link 就像是 c:\winnt 的一個(gè)引用一般,刪除 d:\link 目錄中的內(nèi)容也就是刪除了 c:\winnt 中的內(nèi)容,但刪除 d:\link 本身是不會(huì)影響到 c:\winnt 的。

相應(yīng)的,在程序中也有一個(gè) API 函數(shù) CreateSymbolicLink 支持創(chuàng)建軟鏈接,不過(guò)來(lái)得太晚了,要 Windows VISTA 和 Windows Server 2008 那樣的版本才支持,先還是別想了,API 原型是:

BOOL WINAPI CreateSymbolicLink(
__in LPCWSTR lpSymlinkFileName,
__in LPCWSTR lpTargetFileName,
__in DWORD dwFlags
);

參數(shù):
lpSymlinkFileName 要?jiǎng)?chuàng)建的符號(hào)鏈接名稱(chēng).

lpTargetFileName 符號(hào)鏈接所對(duì)應(yīng)目標(biāo)的名稱(chēng).

dwFlags 標(biāo)識(shí)目標(biāo)是文件還是目錄. 取值0x0 代表是文件,SYMBOLIC_LINK_FLAG_DIRECTORY或0x1 代表是目錄

三:其他方法

也可以使用 GNU utilities for Win32 中的 ln 來(lái)創(chuàng)建硬鏈接。這是一些 GNU 工具的 Win32 移植版本,非常好用。另外 Cygwin 里的 ln 不但可以創(chuàng)建硬鏈接也可以創(chuàng)建符號(hào)鏈接(在 Windows 里就是快捷方式 .lnk 文件)。

實(shí)際需求引出:Web 應(yīng)用中上傳文到 WEB 下的某個(gè)子目錄中,這樣可以直接通過(guò)網(wǎng)頁(yè)鏈接的方式訪(fǎng)問(wèn)到這些文件。但是會(huì)出現(xiàn)的問(wèn)題就是,每當(dāng)完全重新部署應(yīng)用時(shí),如果忘了把存上傳文件的目錄進(jìn)行備份,那么原有上傳文件就全沒(méi)了。原來(lái)項(xiàng)目部署在 Unix 下的做法是,把那個(gè)上傳目錄作為另一個(gè)目錄的符號(hào)鏈接,實(shí)際存儲(chǔ)文件的目錄不在 WEB 應(yīng)用目錄下,重新部署時(shí)只要重建這個(gè)符號(hào)鏈接即可,不會(huì)有覆蓋文件的危險(xiǎn)。當(dāng)然在 Unix/Linux 是好解決,只要用 ln -s 命令就行,然而對(duì)于 Windows 系統(tǒng)卻要想點(diǎn)辦法,為目錄建立快捷的方式是行不通的,目錄的鏈接只會(huì)當(dāng) lnk 文件對(duì)待,在 Explorer 中可以雙擊打開(kāi),但對(duì)于網(wǎng)頁(yè)鏈接或者 cd 命令是無(wú)法正確定位的。于是思考起如何在 Windows 下創(chuàng)建符號(hào)連接的問(wèn)題,才有了上文。

題外:對(duì)于以上的需求,可以在 Web 應(yīng)用外部事先建立好一個(gè)目錄,賦上相應(yīng)的權(quán)限。然后在應(yīng)用的配置文件中記下這個(gè)目錄的絕對(duì)路徑,上傳時(shí)往其中寫(xiě)文件沒(méi)問(wèn)題,關(guān)鍵瀏覽時(shí),因?yàn)槲募趹?yīng)用之后,不能直接通過(guò)網(wǎng)址瀏覽到,就需要通過(guò)一個(gè)程序去讀取相應(yīng)的文件,發(fā)送到瀏覽器之前必須設(shè)置根據(jù)文件類(lèi)型設(shè)置響應(yīng) MINE 類(lèi)型,這個(gè) MINE 類(lèi)型可以在上傳時(shí)記載在庫(kù)的。

現(xiàn)在覺(jué)得這種方法還優(yōu)于用符號(hào)鏈接的方式,至為無(wú)需每次完整發(fā)布后重創(chuàng)建符號(hào)鏈接,而且實(shí)際中也出現(xiàn)過(guò)完全重部署后,目標(biāo)目錄中文件完全丟失的情況。

附件下載:
  Junction下載

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多