原创 文件夹递归copy的源代码收藏

新一篇: CopyFile函数 | 旧一篇: CopyFile函数

/***************************************************************************************************
** 函数名  :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;
 }
}

发表于 @ 2008年09月16日 14:55:00|评论(loading...)|收藏

新一篇: CopyFile函数 | 旧一篇: CopyFile函数

评论:没有评论。

发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © 摄氏37度