共用方式為


執行文件表格

IDE 會維護內部結構稱為執行文件表格 (RDT) 中所有目前開啟的文件的清單。 此清單會包含所有開啟的文件,在記憶體中,不論是否目前正在編輯這些文件。 文件是保存,包括在編輯器,以及在專案中的檔案 」 或 「 主要專案檔 (例如,*.vcproj 檔案) 中開啟的預存程序的任何項目。

執行文件表格中的項目

正在執行的 [文件] 表格包含下列項目。

項目

描述

文件 moniker

字串,可唯一識別文件的資料物件。 這是針對管理檔案 (例如,C:\MyProject\MyFile) 的專案系統絕對檔案路徑。 這個字串也可用於儲存在檔案系統,例如資料庫中的預存程序以外的儲存區中的專案。 在此情況下,專案系統可以設計它可以辨識和可能剖析來決定如何儲存文件的唯一字串。

階層架構的擁有者

階層架構物件,以擁有文件中, IVsHierarchy介面。

項目 ID

指定的項目階層架構中的項目識別項。 這個值是唯一擁有此文件的階層架構中的所有文件之間但不是保證此值在不同的階層是唯一的。

文件資料物件

這是最起碼,IUnknown

物件。 IDE 不需要任何特定的介面超過IUnknown自訂編輯器的文件資料物件的介面。 不過,為了標準編輯器中,編輯器的實作IVsPersistDocData2介面,才能處理從專案檔案的保存性呼叫。 如需詳細資訊,請參閱 標準文件儲存

旗標

項目加入至 RDT 時,可以指定是否已閱讀或編輯鎖定被套用的話,是否已儲存文件的控制旗標等等。 如需詳細資訊,請參閱 _VSRDTFLAGS 列舉。

編輯鎖定計數

編輯鎖定計數。 編輯鎖定表示某些編輯器開啟進行編輯的文件。 時編輯鎖定計數轉換成零,會提示使用者儲存文件,如果它被變更。 例如,每當您在使用編輯器中開啟文件開新視窗指令,在 RDT 中的文件中新增編輯鎖定。 為了要設定編輯鎖定,在文件必須具有階層架構或項目 id。

讀取鎖定計數

計算非讀取鎖定。 讀取的鎖定,指出文件閱讀一些機制,例如精靈。 讀取的鎖定保留將同時指出不能編輯文件的文件還活著的 RDT 中。 您可以設定讀取的鎖定,即使文件沒有階層或項目 id。 這項功能可讓您在記憶體中開啟文件,並不使用文件所擁有的任何階層的情況下,為輸入 RDT 中。 這項功能很少使用。

鎖定擁有者

執行個體的IVsDocumentLockHolder介面。 鎖定擁有者會實作功能,例如 「 精靈 」,開啟並編輯編輯器之外的文件。 鎖定擁有者可讓您加入要防止文件關閉時仍被編輯的文件中編輯鎖定功能。 一般情況下,編輯鎖定只會加入文件視窗 (也就是編輯器)。

在 RDT 中的每個項目都有唯一的階層或項目 ID 相關聯,通常是對應至專案中的一個節點。 由某階層通常擁有所有的文件,可供編輯。 在 RDT 中所做的項目控制哪一個專案,或 — 更準確,哪一個階層架構中,目前擁有要編輯的文件資料物件。 使用中的資訊 RDT,IDE 可以防止文件的多個專案開啟一次。

階層架構也會控制的持續性資料,並使用 RDT 中的資訊來更新儲存另存新檔的對話方塊。 當使用者修改文件,然後選擇 結束 指令從 檔案 IDE 提示對象] 功能表中, 儲存變更以顯示所有專案和目前修改的專案項目] 對話方塊。 這可讓使用者選擇要儲存的文件的哪一個。 若要儲存的文件清單 (也就是這些文件所做的變更) 會產生 RDT。 任何項目,您應該會看到在儲存變更時結束應用程式] 對話方塊中的應該有 RDT 中的記錄。 RDT 座標哪些文件會儲存,是否會提示使用者儲存關於使用標幟項目,每份文件中所指定的值的作業。 如需有關 RDT 旗標的詳細資訊,請參閱_VSRDTFLAGS列舉型別。

編輯鎖定和讀取鎖定

編輯鎖定與讀取的鎖定存放在 RDT。 文件視窗的遞增和遞減編輯就會鎖定。 因此,當使用者開啟新的文件視窗中,編輯鎖定計數會遞增一。 編輯鎖定數目為零時,階層架構會收到信號,以保存或儲存的資料相關聯的文件。 以任何方式,包括保存為檔案或儲存機制中項目的資料,可以再保存階層架構。 您可以使用LockDocument中的方法IVsRunningDocumentTable介面,以加入編輯鎖定和讀取鎖定,以及UnlockDocument方法以移除這些鎖定。

一般情況下,執行個體化編輯器之文件視窗時,窗框報表類似文件的編輯鎖定在 RDT 中。 但是,如果您要建立自訂檢視的文件,不使用標準的文件視窗 (也就是未實作IVsWindowFrame介面),則您必須設定您自己的編輯鎖定。 比方說,在精靈中,文件已編輯但未在編輯器中開啟。 為了讓精靈和類似的實體欲開啟的文件鎖定,就必須實作這些實體IVsDocumentLockHolder介面。 若要註冊您的文件鎖定持有者,呼叫RegisterDocumentLockHolder方法,並傳入您IVsDocumentLockHolder實作。 如此一來,是在 RDT 中加入文件的鎖定持有者。 實作文件的鎖定持有者的另一個案例是如果您開啟的文件,透過特殊的工具視窗。 在這個例子中,您就無法將工具視窗關閉文件項目。 但是,註冊為文件鎖定持有者,在 RDT 中,IDE 可以呼叫您的實作的CloseDocumentHolder方法,以提示文件的結尾。

執行文件表格的其他用法

在 IDE 中的其他實體會使用 RDT 來取得文件的相關資訊。 比方說,原始檔控制管理員] 會使用 RDT 來告知系統,它會取得最新版的檔案之後,重新載入編輯器] 中的文件。 若要這樣做,原始檔控制管理員] 查詢,看看它們是否開啟 RDT 中的檔案。 如果有需要,則原始檔控制管理員會先檢查階層架構實作,請參閱ReloadItem方法。 如果專案不實作ReloadItem方法,則原始檔控制管理員的實作檢查ReloadDocData上的文件資料物件直接的方法。

IDE 也會使用 RDT resurface (提到最上層]) 已開啟的文件,如果使用者要求的文件。 如需詳細資訊,請參閱 使用 [檔案] 命令來顯示檔案。 若要判斷檔案是否在 RDT 中開啟,請執行下列任一。

  • 若要找出該項目是否已開啟的文件 moniker (也就是完整的文件的路徑) 的查詢。

  • 使用階層或項目 ID 要求完整的文件的路徑,專案系統,並接著在 RDT 中查閱此項目。

請參閱

參考

OpenItem

CreateDocumentWindow

概念

在 Visual Studio 中的階層架構

專案類型的基本資訊