文件鎖定持有者管理
執行中的文件資料表 (RDT) 會維護開啟的文件計數及其擁有的任何編輯鎖定。 您可以在以程式設計方式在背景編輯文件時,將編輯鎖定放在 RDT 中,而使用者不會在文件視窗中看到開啟的文件。 設計工具通常會使用這項功能,透過圖形使用者介面修改多個檔案。
文件鎖定持有人案例
檔案「a」相依於檔案「b」
請考慮針對檔案類型「a」實作標準編輯器「A」的情況,而類型「a」的每個檔案都有類型「b」的參考 (或相依性)。 類型為「b」的檔案存在標準編輯器「B」。 當編輯器「A」開啟檔案「a」時,它會擷取對應檔案「b」的參考。 檔案「b」未顯示,但編輯器「A」可以修改它。 編輯器「A」會從 FindAndLockDocument 方法取得檔案「b」文件資料的參考,同時維護檔案 「b」 的編輯鎖定。 在編輯器「A」完成修改檔案「b」之後,您可以呼叫 UnlockDocument 方法來遞減檔案「b」的編輯鎖定計數。 如果您已呼叫 FindAndLockDocument 方法並將 dwRDTLockType
參數設定為 _VSRDTFLAGS.RDT_NoLock,則可以省略此步驟。
檔案「b」由不同的編輯器開啟
當編輯器「A」嘗試開啟檔案「B」時,如果編輯器「B」已開啟檔案「b」,則有兩個要處理的不同案例:
如果在相容的編輯器中開啟檔案「b」,您必須使用 RegisterDocumentLockHolder 方法,讓編輯器「A」註冊檔案「b」的文件編輯鎖定。 在編輯器「A」完成修改檔案「b」之後,請使用 UnregisterDocumentLockHolder 方法來取消註冊文件編輯鎖定。
如果檔案「b」以不相容的方式開啟,您可以讓編輯器「A」嘗試開啟檔案「b」失敗,或者您可以讓與編輯器「A」相關聯的檢視部分開啟並顯示適當的錯誤訊息。 錯誤訊息應指示使用者在不相容的編輯器中關閉檔案「b」,然後使用編輯器「A」重新開啟檔案「a」。 您也可以實作 Visual Studio SDK 方法 QueryCloseRunningDocument,以提示使用者關閉在不相容編輯器中開啟的檔案「b」。 如果使用者關閉檔案「b」,則編輯器「A」中的檔案「a」開啟會正常繼續。
其他文件編輯鎖定考量
如果編輯器「A」是唯一在檔案「b」上具有文件編輯鎖定的編輯器,則您會得到不同的行為,而編輯器「B」也會保留檔案「b」的文件編輯鎖定。 在 Visual Studio 中,[類別設計工具] 是視覺設計工具的範例,其不會在相關聯的程式碼檔案上保留編輯鎖定。 也就是說,如果使用者在設計檢視中開啟類別圖表,且相關聯的程式碼檔案同時開啟,而且如果使用者修改程式碼檔案但未儲存變更,則類別圖表 (.cd) 檔案也會遺失變更。 如果類別設計工具在程式碼檔案上只有文件編輯鎖定,則不會要求使用者在關閉程式碼檔案時儲存變更。 IDE 會要求使用者只在使用者關閉類別設計工具之後,才儲存變更。 儲存的變更會反映在這兩個檔案中。 如果類別設計工具與程式碼檔案編輯器都持有程式碼檔案上的文件編輯鎖定,則會在關閉程式碼檔案或表單時提示使用者進行儲存。 此時,儲存的變更會同時反映在表單和程式碼檔案中。 如需類別圖表的詳細資訊,請參閱使用類別圖表 (類別設計工具)。
請注意,如果您需要將編輯鎖定放在非編輯器的文件上,則必須實作 IVsDocumentLockHolder 介面。
在許多情況下,修改程式碼檔案的 UI 設計師會以程式設計方式對多個檔案進行變更。 在這種情況下,SaveItemsViaDlg 方法會透過 [是否要儲存下列專案的變更?] 對話方塊,處理儲存一或多個文件的儲存作業。