/*************************************************************************************************** ** 函数名 :CopyFolder ** 输 入 :const CString &desc 目的路径 ** const CString &source 源路径 ** 输 出: ** 功能描述:文件夹递归copy ** 全局变量: ** 调用模块: ** 作 者:刘志永 ** 日 期:2008-9-10 ** 修 改: ** 日 期: ** 版 本: ***************************************************************************************************/ BOOL CFolderOperater::CopyFolder(const CString &desc, const CString &source) { try { CString tmpFrom(source); CString tmpTo(desc); if (!PathFileExists(tmpTo)) { CreateDirectory(tmpTo,NULL); } if (PathFileExists(tmpFrom)) { WIN32_FIND_DATA FindFileData; CString tmpFind(tmpFrom); tmpFind += _T("//*.*"); HANDLE hFind=::FindFirstFile(tmpFind,&FindFileData); if(INVALID_HANDLE_VALUE == hFind) return false; while(TRUE) { CString tmpFile(tmpTo); tmpFile += _T("//"); tmpFile += FindFileData.cFileName; if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) //目录 { if(FindFileData.cFileName[0]!='.') { if (!PathFileExists(tmpFile)) //目录不存在 { CreateDirectory(tmpFile,NULL); } CopyFolder(tmpFile,tmpFrom + _T("//") + FindFileData.cFileName); } } else //文件 { CString sExtention=PathFindExtension(tmpFile); if (!PathFileExists(tmpFile)) //文件不存在 { CopyFile(tmpFrom + _T("//") + FindFileData.cFileName,tmpFile,TRUE); //拷贝文件 } else if(sExtention!=_T(".mdb")) { CopyFile(tmpFrom + _T("//") + FindFileData.cFileName,tmpFile,TRUE); //拷贝文件 } else if (sExtention==_T(".mdb"))//数据是扩展名是access数据库 就进行更改目的数据库名称 然后进行复制 { // int dwMinSize = WideCharToMultiByte(CP_OEMCP,NULL,tmpFile,-1,NULL,0,NULL,FALSE); // char lpszStr[MAX_PATH+1]; // WideCharToMultiByte(CP_OEMCP,NULL,tmpFile,-1,lpszStr,dwMinSize,NULL,FALSE); WCHAR wFlag='//'; int nPos=tmpFile.ReverseFind(wFlag); int nLen=tmpFile.GetLength(); CString sFront=tmpFile.Mid(0,nPos); CString sBack=_T("old.mdb") ; CString sNewName=sFront+_T("//")+sBack; //int dwNewMinSize=WideCharToMultiByte(CP_OEMCP,NULL,sNewName,-1,NULL,0,NULL,FALSE); //char lpszNewStr[MAX_PATH+1]; // WideCharToMultiByte(CP_OEMCP,NULL,sNewName,-1,lpszNewStr,dwNewMinSize,NULL,FALSE); rename(tmpFile,sNewName); CopyFile(tmpFrom + _T("//") + FindFileData.cFileName,tmpFile,TRUE); //拷贝文件 CDbRestore dbrestore; dbrestore.RestoreData(tmpFile,sNewName); DeleteFile(sNewName); } } if(!FindNextFile(hFind,&FindFileData)) break; } FindClose(hFind); } return TRUE; } catch (...) { return FALSE; } }