官术网_书友最值得收藏!

3.3 創(chuàng)建與刪除文件硬鏈接

鏈接是對文件的引用,硬鏈接只能引用同一系統(tǒng)中的文件。當移動或刪除原始文件時,硬鏈接不會被破壞,因為它所引用的是文件的物理數(shù)據(jù)而不是文件在文件結(jié)構(gòu)中的位置。硬鏈接的文件不需要用戶有訪問原始文件的權限,也不會顯示原始文件的位置,這樣有助于文件的安全。

文件系統(tǒng)模塊提供了fs.link()、fs.unlink()、fs.linkSync()、fs.unlinkSync()四個方法來完成創(chuàng)建與刪除文件硬鏈接的操作。其中,fs.linkSync()與fs.unlinkSync()是同步方式的一組方法,而fs.link()與fs.unlink()是異步方式的一組方法。

下面介紹以同步方式創(chuàng)建文件硬鏈接的代碼實例。

【代碼3-3】(詳見源代碼目錄ch03-node-fs-link-sync.js文件)

【代碼分析】

? 為了測試創(chuàng)建與刪除文件硬鏈接的操作,先在代碼文件目錄中新建一個“txtlink”子目錄,并新建一個名稱為“l(fā)inkSync.txt”的文本文件;同時,通過fs.linkSync()方法創(chuàng)建的硬鏈接“l(fā)inkSyncNew.txt”也將存放在該目錄中。

? 第25行和第26行代碼聲明了兩個變量(srcpath和dstpath),分別定義為原始文本文件“l(fā)inkSync.txt”和將要創(chuàng)建硬鏈接“l(fā)inkSyncNew.txt”的路徑。

? 第31行代碼通過fs.linkSync()方法創(chuàng)建了原始文本文件“l(fā)inkSync.txt”的硬鏈接“l(fā)inkSyncNew.txt”。

? 第42~70行代碼通過spawn()方法查看了“txtlink”子目錄的文件信息。關于這段代碼中所使用到的功能模塊會在后續(xù)章節(jié)中詳細介紹,讀者可先忽略。

在控制臺中運行該Node程序,具體的輸出內(nèi)容如圖3.3所示。

如圖3.3所示,第16行代碼輸出的原始文件“l(fā)inkSync.txt”的內(nèi)容(文本內(nèi)容為fs.linkSync())與第37行代碼輸出的硬鏈接文件“l(fā)inkSyncNew.txt”的內(nèi)容是完全一致的,這說明fs.linkSync()方法執(zhí)行的創(chuàng)建硬鏈接文件的操作成功完成了。

接下來介紹以同步方式刪除文件硬鏈接的方法。其實,【代碼3-3】中所注銷的第39~41行代碼就是以同步方式刪除文件硬鏈接的操作,只要撤銷注銷這3行代碼就可以了。

圖3.3 創(chuàng)建文件硬鏈接的方法(同步版本)

【代碼3-4】(詳見源代碼目錄ch03-node-fs-link-sync.js文件)

39  console.log('fs.unlinkSync() Start...');
40  fs.unlinkSync(dstpath);
41  console.log('fs.unlinkSync() Done.');

【代碼分析】

? 第40行代碼通過fs.unlinkSync()方法執(zhí)行了刪除硬鏈接文件的操作。

再次在控制臺中運行該Node程序,具體的輸出內(nèi)容如圖3.4所示。

圖3.4 刪除文件硬鏈接的方法(同步版本)

如圖3.4所示,第40行代碼調(diào)用fs.unlinkSync()方法(同步方式)成功執(zhí)行了刪除文件硬鏈接的操作。

另外,結(jié)合本代碼實例的運行結(jié)果來看,使用fs.linkSync()方法(fs.link()方法相同)創(chuàng)建的文件硬鏈接實際上是創(chuàng)建原始文件的新副本,而不是文件的符號鏈接。關于創(chuàng)建文件符號鏈接的方法,將在下一節(jié)進行介紹。

主站蜘蛛池模板: 盖州市| 昌黎县| 广饶县| 韶关市| 海伦市| 涞源县| 乐都县| 曲松县| 武义县| 历史| 汕尾市| 长泰县| 文山县| 庄河市| 马山县| 沾益县| 周口市| 凤冈县| 如东县| 灵武市| 朝阳区| 梅河口市| 盐边县| 佛山市| 鲁甸县| 石楼县| 双鸭山市| 民权县| 尉氏县| 会昌县| 崇仁县| 如东县| 大洼县| 平罗县| 化州市| 秭归县| 泰宁县| 宁晋县| 建瓯市| 灌云县| 青铜峡市|