SccGet 函式
這個函式會擷取一份用來檢視及編譯但不是用於編輯的一或多個檔案。 在大多數的系統檔案都會標示為唯讀。
SCCRTN SccGet(
LPVOID pvContext,
HWND hWnd,
LONG nFiles,
LPCSTR* lpFileNames,
LONG fOptions,
LPCMDOPTS pvOptions
);
參數
pvContext
[in]原始檔控制外掛程式的內容結構。hWnd
[in]原始檔控制外掛程式可用於為父代對話框它所提供的 IDE 視窗控制代碼。nFiles
[in]控制台中的檔案數目lpFileNames陣列。lpFileNames
[in]要擷取的檔案的完整格式名稱陣列。fOptions
[in]Command flags (SCC_GET_ALL, SCC_GET_RECURSIVE).pvOptions
[in]原始檔控制外掛程式專屬選項。
傳回值
原始檔控制外掛程式的實作這個函式被期待傳回下列值之一:
值 |
描述 |
---|---|
SCC_OK |
取得作業成功。 |
SCC_E_FILENOTCONTROLLED |
檔案不在原始檔控制中。 |
SCC_E_OPNOTSUPPORTED |
原始檔控制系統不支援這項作業。 |
SCC_E_FILEISCHECKEDOUT |
無法取得使用者目前已簽出檔案。 |
SCC_E_ACCESSFAILURE |
無法存取原始檔控制系統,可能因為到網路或爭用問題。 建議您重試。 |
SCC_E_NOSPECIFIEDVERSION |
指定了無效的版本或日期/時間。 |
SCC_E_NONSPECIFICERROR |
非特定的失敗。 檔案沒有被同步化。 |
SCC_I_OPERATIONCANCELED |
在完成之前取消作業。 |
SCC_E_NOTAUTHORIZED |
使用者沒有權限才能執行此作業。 |
備註
這個函式呼叫時其計數,且要擷取的檔案名稱的陣列。 如果 IDE 會將傳遞的旗標SCC_GET_ALL,這表示中的項目lpFileNames不是檔案,而目錄,並在指定的目錄中的原始檔控制之下的所有檔案都都要擷取。
SCC_GET_ALL旗標可以結合SCC_GET_RECURSIVE旗標來擷取指定的目錄中的所有檔案和所有的子目錄。
注意事項 |
---|
SCC_GET_RECURSIVE永遠不會通過未SCC_GET_ALL。另外請注意是否目錄 C:\A 和 C:\A\B 兩者傳遞遞迴取得,C:\A\B 和它的子目錄將實際上會擷取兩次。負責 IDE 的 — 並不是原始檔控制外掛程式,以確保這類重複的項目會保持超出陣列。 |
最後,即使原始檔控制外掛程式指定SCC_CAP_GET_NOUI在初始化時,表示它並沒有 Get 命令的使用者介面,以擷取檔案 IDE 仍然可能會呼叫這個函式的旗標。 IDE 不會顯示取得的功能表項目,並提供任何 UI 此外掛程式不是預期的旗標只是表示。
重新命名和 SccGet
情況: 使用者簽出檔案,例如,a.txt,並修改它。 A.txt 可以簽入之前,第二位使用者會 a.txt 到 b.txt 的原始檔控制資料庫中重新命名、 簽出 b.txt、 便會進行一些修改檔案,及存回檔案。 第一位使用者想要讓第一位使用者會自己的本機版本的 a.txt 檔案重新命名為 b.txt,並不會取得新的檔案,第二位使用者所做的變更。 不過,會持續追蹤的版本號碼的本機快取仍然認為第一版的 a.txt 儲存在本機及原始檔控制無法因此解決差異。
有兩種方法可以解決這種情況下,原始檔控制版本的本機快取會與原始檔控制資料庫同步處理變成:
不允許重新命名目前已簽出原始檔控制資料庫中的檔案。
執行"刪除舊"後面接著"新增"對等用法。 下列的演算法是一種方法來完成這項作業。
呼叫SccQueryChanges 函式要深入了解重新命名原始檔控制資料庫中的 b.txt 的 a.txt 函式。
重新命名本機的 a.txt,為 b.txt。
呼叫SccGet a.txt 和 b.txt 的函式。
因為 a.txt 不存在於原始檔控制資料庫中,本機版本快取清除的遺漏的 a.txt 版本資訊。
簽出的 b.txt 檔案會合併本機 b.txt 檔案的內容。
現在可以將更新的 b.txt 檔案簽入。