/***************************************************************************************************标签:tmpFile,源代码,CString,NULL,cFileName,文件夹,FindFileData,copy,tmpFrom From: https://blog.51cto.com/u_15942605/6024365
** 函数名 :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;
}
}