檔案夾遞迴copy的原始碼

來源:互聯網
上載者:User

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.