共用方式為


CreateHardLinkA 函式 (winbase.h)

建立現有檔案與新檔案之間的硬式連結。 只有 NTFS 檔案系統才支援此函式,而僅適用於檔案,而非目錄。

若要以交易作業的形式執行這項作業,請使用 CreateHardLinkTransacted 函式。

語法

BOOL CreateHardLinkA(
  [in] LPCSTR                lpFileName,
  [in] LPCSTR                lpExistingFileName,
       LPSECURITY_ATTRIBUTES lpSecurityAttributes
);

參數

[in] lpFileName

新檔案的名稱。

此參數可能包含路徑,但無法指定目錄的名稱。

根據預設,名稱限製為MAX_PATH個字元。 若要將此限制延伸至 32,767 寬字元,請在路徑前面加上 “\\?\”。 如需詳細資訊,請參閱 命名檔案、路徑和命名空間

提示

從 Windows 10 版本 1607 開始,您可以選擇移除MAX_PATH限制,而不需預先加上 “\\?\”。 如需詳細資訊,請參閱 命名檔案、路徑和命名空間 的一節。

[in] lpExistingFileName

現有檔案的名稱。

此參數可能包含路徑無法指定目錄的名稱。

根據預設,名稱限製為MAX_PATH個字元。 若要將此限制延伸至 32,767 寬字元,請在路徑前面加上 “\\?\”。 如需詳細資訊,請參閱 命名檔案、路徑和命名空間

提示

從 Windows 10 版本 1607 開始,您可以選擇移除MAX_PATH限制,而不需預先加上 “\\?\”。 如需詳細資訊,請參閱 命名檔案、路徑和命名空間 的一節。

lpSecurityAttributes

保留;必須 NULL

傳回值

如果函式成功,則傳回值為非零值。

如果函式失敗,傳回值為零 (0)。 若要取得擴充的錯誤資訊,請呼叫 GetLastError

使用此函式建立的硬式連結數目上限是每個檔案 1023 個。 如果為檔案建立超過1023個連結,則會產生錯誤。

如果您將名稱超過MAX_PATH個字元傳遞至路徑的 lpFileNamelpExistingFileName 參數,或傳遞至此函式的 Unicode 版本,而不需要將 “\\?\” 前面加上路徑,函式會傳回ERROR_PATH_NOT_FOUND。

言論

使用 CreateFileCreateHardLink 建立之檔案的任何目錄專案,都是關聯檔案的硬式連結。 使用 createHardLink 函式建立的額外硬連結可讓您擁有檔案的多個目錄專案,也就是相同檔案的多個硬式連結,這可以是相同目錄中的不同名稱,或是不同目錄中的相同或不同名稱。 不過,檔案的所有硬式連結都必須位於相同的磁碟區上。

因為硬式連結只是檔案的目錄專案,所以透過參考檔案的硬式連結,可立即看到該檔案的許多變更。 不過,目錄專案大小和屬性資訊只會針對進行變更的連結進行更新。

安全性描述元屬於硬式連結所指向的檔案。 連結本身只是目錄專案,而且沒有安全性描述元。 因此,當您變更硬式連結的安全性描述元時,您會變更基礎檔案的安全性描述元,以及指向檔案的所有硬式連結都允許新指定的存取。 您無法根據每個硬式連結提供不同的安全性描述項。

此函式不會修改要連結之檔案的安全性描述元,即使安全性描述項資訊是在 lpSecurityAttributes 參數中傳遞也一樣。

使用 DeleteFile 刪除硬式連結。 不論建立的順序為何,您都可以依任何順序刪除它們。

CreateFile 中所指定的旗標、屬性、存取和共用 會以個別檔案為基礎運作。 也就是說,如果您開啟不允許共用的檔案,另一個應用程式就無法藉由建立檔案的新硬式連結來共用檔案。

當您在NTFS文件系統上建立硬式連結時,只有在開啟檔案時,才會重新整理目錄專案中的檔案屬性資訊,或是 使用特定檔案的句柄呼叫 getFileInformationByHandle 時。

符號連結行為: 如果路徑指向符號連結,函式會建立符號連結的硬連結。

在 Windows 8 和 Windows Server 2012 中,下列技術支援此功能。

科技 支援
伺服器消息塊 (SMB) 3.0 通訊協定 是的
SMB 3.0 透明故障轉移 (TFO)
具有向外延展檔案共用的SMB 3.0(SO)
叢集共用磁碟區檔案系統 (CsvFS) 是的
復原檔案系統 (ReFS)
 

請注意,SMB 3.0 不支援在具有持續可用性功能的共用上建立硬式連結。

例子

下列代碼段示範如何呼叫 createHardLink ,使其不會修改檔案的安全性描述元。 pszExistingFileName 參數可以是源檔名稱,或檔案的任何現有連結。 執行此程式代碼之後,pszNewLinkName 參考檔案。

  BOOL fCreatedLink = CreateHardLink( pszNewLinkName, 
                                      pszExistingFileName, 
                                      NULL ); // reserved, must be NULL

  if ( fCreatedLink == FALSE )
   {
    ;// handle error condition
   }

注意

winbase.h 標頭會將 CreateHardLink 定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的 慣例。

要求

要求 價值
最低支援的用戶端 Windows XP [僅限傳統型應用程式]
支援的最低伺服器 Windows Server 2003 [僅限傳統型應用程式]
目標平臺 窗戶
標頭 winbase.h (包括 Windows.h)
連結庫 Kernel32.lib
DLL Kernel32.dll

另請參閱

CreateFile

CreateHardLinkTransacted

DeleteFile

檔案管理功能

硬連結和接合

符號連結