Aracılığıyla paylaş


SccGet işlevi

Bu işlev, görüntülemek ve derlemek için bir veya daha fazla dosya kopyasını alır ancak düzenlemek için alamaz. Çoğu sistemde dosyalar salt okunur olarak etiketlenir.

Sözdizimi

SCCRTN SccGet(
   LPVOID    pvContext,
   HWND      hWnd,
   LONG      nFiles,
   LPCSTR*   lpFileNames,
   LONG      fOptions,
   LPCMDOPTS pvOptions
);

Parametreler

pvContext

[in] Kaynak denetimi eklentisinin bağlam yapısı.

Hwnd

[in] Kaynak denetimi eklentisinin sağladığı iletişim kutuları için üst öğe olarak kullanabileceği IDE penceresinin tanıtıcısı.

nFiles

[in] Dizide lpFileNames belirtilen dosya sayısı.

lpFileNames

[in] Alınacak dosyaların tam adları dizisi.

fOptions

[in] Komut bayrakları (SCC_GET_ALL, SCC_GET_RECURSIVE).

pvOptions

[in] Kaynak denetimi eklentisine özgü seçenekler.

Dönüş değeri

Bu işlevin kaynak denetimi eklentisinin aşağıdaki değerlerden birini döndürmesi beklenir:

Value Açıklama
SCC_OK Alma işleminin başarısı.
SCC_E_FILENOTCONTROLLED Dosya kaynak denetimi altında değil.
SCC_E_OPNOTSUPPORTED Kaynak denetim sistemi bu işlemi desteklemiyor.
SCC_E_FILEISCHECKEDOUT Kullanıcının şu anda kullanıma aldığı dosya alınamıyor.
SCC_E_ACCESSFAILURE Büyük olasılıkla ağ veya çekişme sorunlarından dolayı kaynak denetim sistemine erişilirken bir sorun oluştu. Yeniden deneme önerilir.
SCC_E_NOSPECIFIEDVERSION Geçersiz bir sürüm veya tarih/saat belirtildi.
SCC_E_NONSPECIFICERROR Özel olmayan hata; dosyası eşitlenmedi.
SCC_I_OPERATIONCANCELED İşlem tamamlanmadan önce iptal edildi.
SCC_E_NOTAUTHORIZED Kullanıcının bu işlemi gerçekleştirme yetkisi yok.

Açıklamalar

Bu işlev bir sayı ve alınacak dosyaların ad dizisiyle çağrılır. IDE bayrağını SCC_GET_ALLgeçirirse, içindeki öğelerin lpFileNames dosya değil dizinler olduğu ve belirtilen dizinlerdeki kaynak denetimi altındaki tüm dosyaların alınacağı anlamına gelir.

Bayrak, SCC_GET_ALL verilen dizinlerdeki ve tüm alt dizinlerdeki tüm dosyaları almak için bayrağıyla SCC_GET_RECURSIVE birleştirilebilir.

Not

SCC_GET_RECURSIVE olmadan SCC_GET_ALLhiçbir zaman geçirilmemelidir. Ayrıca, C:\A ve C:\A\B dizinlerinin her ikisi de özyinelemeli almada geçirilirse, C:\A\B ve tüm alt dizinlerinin aslında iki kez alınacağını unutmayın. Bunun gibi yinelemelerin dizi dışında tutulduğundan emin olmak, kaynak denetimi eklentisinin değil IDE'nin sorumluluğundadır.

Son olarak, bir kaynak denetimi eklentisi başlatmada bayrağı belirtmiş SCC_CAP_GET_NOUI olsa bile, Get komutu için kullanıcı arabirimi olmadığını belirtse bile, bu işlev dosyaları almak için IDE tarafından çağrılmaya devam edebilir. Bayrağı, IDE'nin Bir Al menü öğesi görüntülemediği ve eklentinin herhangi bir kullanıcı arabirimi sağlamasının beklenmediği anlamına gelir.

Dosyaları ve SccGet'i yeniden adlandırma

Durum: Kullanıcı bir dosyayı (örneğin, a.txt) kullanıma alır ve değiştirir. A.txt'nin iade edilebilmesi için, ikinci bir kullanıcı kaynak denetim veritabanında a.txt dosyasını b.txt olarak yeniden adlandırır, b.txt dosyasını kullanıma alır, dosyada bazı değişiklikler yapar ve dosyayı iade eder. İlk kullanıcı, ikinci kullanıcı tarafından yapılan değişiklikleri ister, böylece ilk kullanıcı a.txt dosyasının yerel sürümünü b.txt olarak yeniden adlandırır ve dosyaya bir alma yapar. Ancak, sürüm numaralarını takip eden yerel önbellek hala a.txt dosyasının ilk sürümünün yerel olarak depolandığını ve bu nedenle kaynak denetiminin farklılıkları çözemediğini düşünür.

Kaynak denetimi sürümlerinin yerel önbelleğinin kaynak denetim veritabanıyla eşitlenmediği bu durumu çözmenin iki yolu vardır:

  1. Şu anda kullanıma alınmış olan kaynak denetim veritabanında bir dosyanın yeniden adlandırılmasına izin verme.

  2. "Eskiyi sil" ve ardından "yeni ekle" ifadesinin eşdeğerini yapın. Aşağıdaki algoritma, bunu gerçekleştirmenin bir yoludur.

    1. Kaynak denetim veritabanında a.txt dosyasının b.txt olarak yeniden adlandırılması hakkında bilgi edinmek için SccQueryChanges işlevini çağırın.

    2. Yerel a.txt dosyasını b.txt olarak yeniden adlandırın.

    3. SccGet hem a.txt hem de b.txt için işlevini çağırın.

    4. Kaynak denetimi veritabanında a.txt olmadığından, yerel sürüm önbelleği eksik a.txt sürüm bilgilerinden temizlenir.

    5. Kullanıma alınan b.txt dosyası, yerel b.txt dosyasının içeriğiyle birleştirilir.

    6. Güncelleştirilmiş b.txt dosyası artık iade edilebilir.

Ayrıca bkz.