⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vsstool.cpp

📁 自动化编译工具代码
💻 CPP
字号:
#include "StdAfx.h"
#include <atlbase.h>
#include "VSSTool.h"

CVSSTool::CVSSTool()
	   :m_bDBIsOpen(FALSE)
{
	HRESULT hr = m_pVSS.CreateInstance(L"SourceSafe");
	ASSERT(SUCCEEDED(hr));
}

CVSSTool::CVSSTool(const CString &strVSSIniFile,
				   const CString &strUserName,
				   const CString &strVserPass)
	   :m_bDBIsOpen(FALSE)
{
	HRESULT hr = m_pVSS.CreateInstance(L"SourceSafe");
	ASSERT(SUCCEEDED(hr));
	this->Open(strVSSIniFile, strUserName, strVserPass);
}

CVSSTool::~CVSSTool()
{
}

void CVSSTool::Open(const CString &strVSSIniFile,
					const CString &strUserName,
					const CString &strVserPass )
{
	if (m_pVSS != NULL)
	{
		_bstr_t bstrVssIniPath	= strVSSIniFile.AllocSysString();
		_bstr_t bstrUserName	= strUserName  .AllocSysString();
		_bstr_t bstrUserPass	= strVserPass  .AllocSysString();
		m_bDBIsOpen = SUCCEEDED(m_pVSS->Open(bstrVssIniPath, bstrUserName, bstrUserPass));
	}	
}

BOOL CVSSTool::GetFiles(const CString &strVSSPath, 
						const CString &strLocalPath)
{
	ASSERT(IsValid());
	if (!IsValid())			return FALSE;

	_bstr_t bstrVSSPath = strVSSPath.AllocSysString();

	IVSSItemPtr pItem = m_pVSS->GetVSSItem(bstrVSSPath, FALSE);
	if (pItem)
	{
		CComBSTR    bstrLocalPath = strLocalPath.AllocSysString();
		pItem->Get(&bstrLocalPath, VSSFLAG_FORCEDIRYES);

		return GetVSSItem(strLocalPath, pItem);
	}

	return FALSE;
}

//
// GetLastVerson
//
BOOL CVSSTool::GetVSSItem(const CString &strLocalPath,
						  IVSSItemPtr pItem)
{
	ASSERT(pItem != NULL);

	BOOL bResult = TRUE;

	if (pItem->GetType() == VSSITEM_PROJECT)	//directory
	{
		IVSSItemsPtr  pItems = pItem->GetItems(FALSE);
		for (int i = 1; i <= pItems->GetCount(); i++)
		{
			IVSSItemPtr pSubItem = pItems->GetItem(CComVariant(i));
			ASSERT(pSubItem != NULL);

			CString strSubItemName   = pSubItem->GetName().copy();
			CString strItemLocalPath = strLocalPath + "\\" + strSubItemName;
			//recursion
			bResult = GetVSSItem(strItemLocalPath, pSubItem) && bResult;
		}
	} 
	else										//file
	{
		CComBSTR bstrLocalPath    = strLocalPath.AllocSysString();

		HRESULT hr = pItem->Get(&bstrLocalPath, VSSFLAG_FORCEDIRYES);
		ASSERT(bResult = SUCCEEDED(hr));
	}

	return bResult;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -