NTFS 連結點


Windows 作業系統使用的 NTFS 檔案系統包含 NTFS(新型技術檔案系統)連結點。本質上,連結點是一種符號連結,允許您將一個目錄連線到同一檔案系統內的另一個目錄。

在本文中,我們將探討 NTFS 連結點、其架構圖、用例、C# 示例程式碼及其優勢。

NTFS 連結點

連結點的主要目的是構建目錄級連結,允許您將路徑的目標更改為同一捲上的另一個位置。這在各種情況下都很有幫助,包括組織檔案和資料夾、在不中斷當前路徑的情況下重新定位資料以及保持與需要特定檔案位置的舊版軟體的相容性。

NTFS 連結點架構圖

           

NTFS 連結點的用例

以下是一些實際示例,展示瞭如何使用 NTFS 連結點:

重定向使用者配置檔案資料夾 - 使用者配置檔案資料夾可以在 Windows 中重定向,因為它們通常位於“C:\Users”目錄中。但是,當您希望將使用者配置檔案儲存在不同的驅動器或分割槽上時,您可以建立一個將“C:\Users”目錄路由到正確位置的連結點。您可以這樣做以將使用者資料與系統驅動器隔離,從而簡化備份、提高效能或為系統驅動器騰出有限的儲存空間。

移動遊戲安裝 - 許多現代影片遊戲需要大量的儲存空間。遊戲安裝預設情況下可能位於“C:\Program Files”或“C:\Program Files (x86)”目錄中。如果您有單獨的驅動器用於遊戲安裝,則可以建立一個將遊戲安裝目錄指向所需位置的連結點。這使您可以將遊戲井然有序地儲存在獨立於系統磁碟的位置,並且仍然可以透過其安裝路徑訪問它們。

重新組織媒體庫 - 如果你有一個大型媒體庫,其中包含分散在多個資料夾中的音樂、電影或其他多媒體專案,則可以使用 NTFS 連結點建立一個統一的媒體表示。例如,您可能在“C:\Music”和“D:\Music”等不同目錄中分散了音樂檔案。透過在中心位置(例如“E:\Media”)建立一個連結到這兩個目錄的連結點,您可以輕鬆訪問所有音樂檔案,而無需瀏覽多個資料夾。

資料夾同步和映象 - 連結點對於在不同磁碟或位置之間同步或映象特定資料夾可能很有用。例如,如果您在本地驅動器上有一個包含重要文件的資料夾,則可能希望在可移動驅動器上保留該資料夾的同步副本。透過建立一個將其連結到驅動器的連結點,對原始資料夾所做的任何更改都將自動反映在可移動驅動器上的映象資料夾中。

共享網路裝置 - NTFS 連結點可用於網路環境中,以授予對特定檔案或目錄的共享訪問許可權。例如,如果您有一個共享網路驅動器“Z:”,則可以在其中指定連結到其他網路資料夾的連結點,使使用者可以輕鬆訪問這些資料夾,同時保持統一的目錄結構。

NTFS 連結點的優勢

NTFS 連結點具有許多優勢,並且在各種情況下都可能很有用。以下是一些實際示例,展示了 NTFS 連結點的優勢:

  • 檔案和資料夾組織 - 連結點允許您以邏輯方式組織檔案和資料夾,而無需實際移動它們。

  • 應用程式相容性 - 一些程式可能需要將檔案儲存在特定目錄中。透過使用連結點,您可以將檔案保留在其原始位置,同時將路徑重定向到所需的資料夾。這對於依賴於特定檔案路徑的舊版軟體而言,確保了相容性。

  • 系統驅動器管理 - 使用 NTFS 連結點可以促進系統驅動器空間的管理。

  • 協作和共享 - 連結點可以透過允許多個使用者或組訪問和處理同一組資料(而無需實際複製它們)來增強協作和共享。

示例

以下 C# 程式碼演示瞭如何使用 System.IO 名稱空間的 CreateJunctionPoint 函式建立 NTFS 連結點。程式碼以原始目錄路徑和所需的連結點路徑作為輸入。它檢查原始目錄是否存在以及連結點路徑是否可用。

using System;
using System.IO;

class Program
{
   static void Main()
   {
      string originalPath = @"C:\OriginalDirectory";
      string junctionPath = @"C:\JunctionPoint";

      try
      {
         CreateJunctionPoint(originalPath, junctionPath);
         Console.WriteLine("Junction point created successfully.");
      }
      catch (Exception ex)
      {
         Console.WriteLine("An error occurred: " + ex.Message);
      }
   }

   static void CreateJunctionPoint(string originalPath, string junctionPath)
   {
      if (!Directory.Exists(originalPath))
      {
         throw new DirectoryNotFoundException("Original directory does not exist.");
      }

      if (Directory.Exists(junctionPath))
      {
         throw new IOException("Junction point path already exists.");
      }

      Directory.CreateDirectory(junctionPath);

      using (var junctionHandle = Directory.Open(junctionPath, FileMode.Open))
      {
         var reparseDataBuffer = Encoding.Unicode.GetBytes($"Microsoft Corporation\0{originalPath}\0");
         using (var handle = new SafeFileHandle(junctionHandle.DangerousGetHandle(), true))
         {
               NativeMethods.DeviceIoControl(handle, NativeMethods.FSCTL_SET_REPARSE_POINT, reparseDataBuffer, reparseDataBuffer.Length, IntPtr.Zero, 0, out _);
            }
      }
   }
}

輸出

Junction point created successfully.

結論

連結點是 Windows 作業系統中 NTFS 檔案系統的一個有用元件。它們提供了一種在同一卷內構建目錄級連結的方法,具有許多優勢和應用。

NTFS 連結點允許靈活的檔案和資料夾組織,無需物理移動專案,從而促進邏輯組織和快速訪問資料。透過重定向檔案路徑,它們還提供應用程式相容性,確保依賴於特定位置的舊版軟體仍然可以平穩執行。

更新於:2023年7月17日

309 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.