文件夹递归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;
 }
}


相关文章
|
3月前
|
Java
java中实现File文件的重命名(renameTo)、将文件移动到其他目录下、文件的复制(copy)、目录和文件的组合(更加灵活方便)
这篇文章介绍了Java中使用`renameTo()`、`Files.copy()`等方法对文件进行重命名、移动和复制的操作,并提供了代码实例和测试效果。
java中实现File文件的重命名(renameTo)、将文件移动到其他目录下、文件的复制(copy)、目录和文件的组合(更加灵活方便)
|
6月前
|
定位技术 索引 Python
Python遍历多个子文件夹并基于文件名特征将文件复制到不同的目标文件夹
Python遍历多个子文件夹并基于文件名特征将文件复制到不同的目标文件夹
|
Unix Shell 测试技术
Python 文件复制&按目录树结构拷贝&批量删除目录及其子目录下的文件
Python 文件复制&按目录树结构拷贝&批量删除目录及其子目录下的文件
146 0
|
Python
PyCharm文件删除后提示文件找不到:递归删除目录下pyc文件
PyCharm文件删除后提示文件找不到:递归删除目录下pyc文件
170 0
递归删除指定文件-目录
递归删除指定文件-目录
123 0
|
开发框架 .NET Windows
文件和文件夹的操作——获取当前路径方法
文件和文件夹的操作——获取当前路径方法
274 0
|
机器学习/深度学习 Python
查找某文件夹下所有子文件夹内的py文件-3 一行代码搞定
转自:https://mp.weixin.qq.com/s/FFXh8gRci4hMo6_gnBMPUg       工作中,有时会产生查找某一类文件的需求,比如log文件。或者在做图像类深度学习时,需要读取大类文件夹下,所有小类文件夹下的图片。
1429 0
|
Python
查找某文件夹下所有子文件夹内的py文件
import globimport os fp = '/Users/../Desktop'pylist = []def get_py(fp): filelist = glob.glob(os.path.
1440 0