文件夹递归copy的源代码

简介: 文件夹递归copy的源代码
/***************************************************************************************************
** 函数名  :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;
 }
}


相关文章
|
6月前
|
Unix Linux C++
相对路径vs绝对路径 python文件的添加与删除
相对路径vs绝对路径 python文件的添加与删除
|
应用服务中间件
dist文件夹、src文件夹、dest文件夹作用
dist文件夹、src文件夹、dest文件夹作用
477 0
|
8月前
|
定位技术 索引 Python
Python遍历多个子文件夹并基于文件名特征将文件复制到不同的目标文件夹
Python遍历多个子文件夹并基于文件名特征将文件复制到不同的目标文件夹
|
8月前
|
Python
Python 递归查找空文件夹
Python 递归查找空文件夹
43 0
|
测试技术
【解决方案 十四】文件夹压缩及解压、递归删除文件夹
【解决方案 十四】文件夹压缩及解压、递归删除文件夹
124 0
|
Unix Shell 测试技术
Python 文件复制&按目录树结构拷贝&批量删除目录及其子目录下的文件
Python 文件复制&按目录树结构拷贝&批量删除目录及其子目录下的文件
155 0
python 如何实现删除指定文件夹下的指定后缀名文件
python 如何实现删除指定文件夹下的指定后缀名文件
|
Python
Python 技术篇-不使用os模块判断指定路径是文件还是文件夹,使用pathlib库判断文件和文件夹
Python 技术篇-不使用os模块判断指定路径是文件还是文件夹,使用pathlib库判断文件和文件夹
195 0
Python 技术篇-不使用os模块判断指定路径是文件还是文件夹,使用pathlib库判断文件和文件夹
|
分布式计算 Hadoop 开发者
文件和文件夹的判断| 学习笔记
快速学习文件和文件夹的判断
242 0
|
开发框架 .NET Windows
文件和文件夹的操作——获取当前路径方法
文件和文件夹的操作——获取当前路径方法
286 0