bool FileMisc::CopyFolder(const TCHAR* szSrcFolder, const TCHAR* szDestFolder, BOOL bIncludeSubFolders, const TCHAR* szFileMask, HANDLE hTerminate, BOOL bProcessMsgLoop) { if (!CreateFolder(szDestFolder)) { return false; } if (!FolderExists(szSrcFolder)) { return false; } // if a file mask has been specified with subfolders we need to do 2 passes on each folder, // one for the files and one for the sub folders int nPasses = (bIncludeSubFolders && (szFileMask && lstrlen(szFileMask))) ? 2 : 1; bool bResult = true; bool bStopped = (WaitForSingleObject(hTerminate, 0) == WAIT_OBJECT_0); for (int nPass = 0; !bStopped && nPass < nPasses; nPass++) { CString sSearchSpec(szSrcFolder), sMask(szFileMask); if (sMask.IsEmpty() || nPass == 1) // (nPass == 1) == 2nd pass (for folders) { sMask = "*.*"; } TerminatePath(sSearchSpec); sSearchSpec += sMask; WIN32_FIND_DATA finfo; HANDLE hSearch = NULL; if ((hSearch = FindFirstFile(sSearchSpec, &finfo)) != INVALID_HANDLE_VALUE) { do { if (bProcessMsgLoop) { Misc::ProcessMsgLoop(); } if (finfo.cFileName[0] != '.') { CString sSource(szSrcFolder); sSource += "\\"; sSource += finfo.cFileName; CString sDest(szDestFolder); sDest += "\\"; sDest += finfo.cFileName; if (finfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { if ((nPass == 1 || nPasses == 1) && bIncludeSubFolders) { bResult = CopyFolder(sSource, sDest, hTerminate); } } else if (nPass == 0) // files { bResult = (TRUE == CopyFile(sSource, sDest, FALSE)); } } bStopped = (WaitForSingleObject(hTerminate, 0) == WAIT_OBJECT_0); } while (!bStopped && bResult && FindNextFile(hSearch, &finfo)); FindClose(hSearch); } } return (!bStopped && bResult); }
void CPDTestHelper::SaveDocument(const CStdString& sDocumentName, const CStdString& sAppID, CStdString& sTestDocID) { USES_CONVERSION; DOCSObjects::IApplicationPtr pApp( __uuidof( DOCSObjects::Application )); pApp->PutDefParentWindow( 0 ); DOCSObjects::ILibrariesPtr pLibs = pApp->GetLibraries(); DOCSObjects::ILibraryPtr pLib = pApp->GetCurrentLibrary(); DOCSObjects::IDOCSFormsPtr pForms = pLib->GetForms(); DOCSObjects::IProfilePtr pBaseProf = NULL; DOCSObjects::IDOCSFormPtr pForm = NULL; int iCount = pForms->GetCount(); bool bFoundProf = FALSE; _variant_t vtIndex; vtIndex.vt = VT_I4; for (vtIndex.lVal = 1; (vtIndex.lVal <= iCount) && (!bFoundProf); vtIndex.lVal++) { pForm = pForms->GetItem(vtIndex); if (pForm->GetType() & DOCSObjects::FT_DEFAULT_PROFILE) { // ATLTRACE("Found default form,\n"); // ATLTRACE("Form %2.2d, Type = 0x%02x, Name = %s\n", vtIndex.lVal, pForm->GetType(), (LPCTSTR) pForm->GetName()); pBaseProf = pLib->CreateProfile(pForm->GetName()); bFoundProf = TRUE; } } // TT - I assume that there should always be a default profile // but lets protect ourselves anyway. if (pBaseProf == NULL) { // ATLTRACE("No default form, Default form type = 0x%02X\n", FT_DEFAULT_PROFILE); pBaseProf = pLib->CreateProfile( _bstr_t( _T("LAWPROF") )); } DOCSObjects::IColumnsPtr pCols = pBaseProf->GetColumns(); DOCSObjects::IColumnPtr pCol = pCols->GetItem( _variant_t( _T("APP_ID") )); pCol->PutValue( _variant_t( T2CW(sAppID.c_str()) ) ); pCol = pCols->GetItem( _variant_t( _T("DOCNAME") )); pCol->PutValue( _variant_t( sDocumentName.c_str() ) ); pCol = pCols->GetItem( _variant_t( _T("TYPE_ID") )); pCol->PutValue( _variant_t( L"MEMO")); pCol = pCols->GetItem( L"AUTHOR_ID"); pCol->PutValue(L"pair"); pCol = pCols->GetItem(L"TYPIST_ID"); pCol->PutValue(L"pair"); pCol = pCols->GetItem(L"CLIENT_ID"); pCol->PutValue(L"TEST"); pCol = pCols->GetItem(L"MATTER_ID"); pCol->PutValue(L"TEST"); VARIANT_BOOL vb = pBaseProf->Save( DOCSObjects::OF_NORMAL ); assertTest(vb); DOCSObjects::IVersionPtr pVer = pBaseProf->GetCurrentVersion(); BSTR sFilePath = pVer->GetFilePath(); CStdString sDest(sFilePath); SysFreeString(sFilePath); bool bSuccess = false; if (sAppID.CompareNoCase(_T("ACROBAT")) == 0) { bSuccess = (CopyFile(TEST_PDF_FILE,sDest.c_str(),false)!=0); } else { bSuccess = (CopyFile(TEST_DOC_FILE,sDest.c_str(),false)!=0); } assertTest(bSuccess); LONG lDocID = pBaseProf->GetDocNumber(); BSTR bsLibName = pLib->GetName(); CStdString sLibName(bsLibName); SysFreeString(bsLibName); sTestDocID.Format(_T("PowerDocs://%s/%d/1"),sLibName.c_str(),lDocID); pVer->UploadFile( NULL ); pVer->UnlockVersion( DOCSObjects::OF_NORMAL ); pBaseProf->ReleaseDoc(); }