共用方式為


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]命令旗標 (SCC_GET_ALLSCC_GET_RECURSIVE)。

pvOptions

[in]原始檔控制外掛程式特定選項。

傳回值

此函式的原始檔控制外掛程式實作應該會傳回下列其中一個值:

Description
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:\AC:\A\B 都傳遞在遞歸 get 上, 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 儲存在本機,因此原始檔控制無法解決差異。

有兩種方式可以解決此情況:原始檔控制版本的本機快取與原始檔控制資料庫不同步:

  1. 不允許在目前取出的原始檔控制資料庫中重新命名檔案。

  2. 執行 「delete old」 的對等專案,後面接著 「add new」。 下列演算法是完成這項作業的其中一種方式。

    1. 呼叫 SccQueryChanges 函式,以瞭解如何在原始檔控制資料庫中將 a.txt 重新命名b.txt。

    2. 將本機 a.txt 重新命名為 b.txt

    3. SccGet同時呼叫 a.txt 和 b.txt函式。

    4. 因為原始檔控制資料庫中沒有 a.txt,所以本機版本快取會清除遺漏的 a.txt 版本資訊。

    5. 正在取出的 b.txt 檔案會與本機 b.txt 檔案的內容合併。

    6. 更新的 b.txt 檔案現在可以簽入。

另請參閱