QQ登录

只需一步,快速开始

174上位机VC MFC迭代复制文件夹及内部文件

[ 复制链接 ]

174上位机VC MFC迭代复制文件夹及内部文件

174上位机VC MFC迭代复制文件夹及内部文件

174上位机VC MFC迭代复制文件夹及内部文件


功能展示

将指定的文件夹包括其内部的文件及子文件夹复制到其他目录可以用迭代的方法实现也可以SHFileOperation()函数实现,当前例程实现两种方法复制文件夹的功能,效果如图;
要点提示
SHFileOperation()函数控制文件夹时,可以通过设置它参数的具体值来完成,函数原型为int WINAPI SHFileOperation(LPSHFILEOPSTRUCT lpFileOp ); 指定lpFileOp .wFunc=FO_COPY或FO_MOVE或FO_DELETE或FO_RENAME;分别表示复制移动删除重命名文件;具体用法参考例程源码;

另一种方法是通过CFileFind类的成员函数遍历要复制的文件夹内容,再通过CopyFile(), CopyFolder()迭代复制文件和文件夹到指定目录;






实现功能
1.新建基于对话框的应用程序
2.拖拽一静态文本控件ID 为IDC_NOTE,用于显示操作结果;
拖拽两编辑框ID为IDC_EDIT1,IDC_EDIT2用于显示源文件夹及目标夹路径;
拖拽两按钮实现源文件夹及目标夹路径的选择;

两拖拽两按钮实现两种不同方法的复制;
  1. void CGkbc8Dlg::OnBrowser1()
  2. {
  3.         //><获取桌面路径
  4.         LPITEMIDLIST pidl;
  5.         LPMALLOC pShellMalloc;
  6.         char szDir[MAX_PATH];
  7.         
  8.         if(SUCCEEDED(SHGetMalloc(&pShellMalloc)))
  9.         {
  10.                 if(SUCCEEDED(SHGetSpecialFolderLocation(NULL,CSIDL_DESKTOP,&pidl)))
  11.                 {
  12.                         SHGetPathFromIDList(pidl, szDir);
  13.                         pShellMalloc->Free(pidl);
  14.                 }
  15.                 pShellMalloc->Release();
  16.         }
  17. //><选择路径
  18.     BROWSEINFO bi;   
  19.     bi.hwndOwner      = this->GetSafeHwnd();  
  20.     bi.pidlRoot       = NULL;  
  21.     bi.pszDisplayName = NULL;   
复制代码
  1. bi.lpszTitle      = TEXT("请选择文件夹");   
  2.     bi.ulFlags        = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT;  
  3.     bi.lpfn           = BrowseCallBackFun;NULL;  // //回调函数
  4.     bi.lParam         = (LPARAM)szDir;//= 0;//传给回调函数的参数,设置默认路径
  5.     bi.iImage         = 0;   

  6.     pidl = SHBrowseForFolder(&bi);  
  7.     if (pidl == NULL)  
  8.         return;
  9.   
  10.     if (SHGetPathFromIDList(pidl, szDir))  
  11.         {
  12.                 CString sDir(szDir);
  13.                 SetDlgItemText(IDC_EDIT2,sDir);
  14.         }        
  15. }
  16. void CGkbc8Dlg::OnSinglecopy()
  17. {
  18.         CString sDir,sNewDir;
  19.         GetDlgItemText(IDC_EDIT1,sDir);
  20.         GetDlgItemText(IDC_EDIT2,sNewDir);        
  21.         char SourceFolder[MAX_PATH+1]="";
  22.                 strcpy(SourceFolder,sDir);
  23.         char TargetFolder[MAX_PATH+1]="";
  24.                 strcpy(TargetFolder,sNewDir);
  25. //
  26.         SHFILEOPSTRUCT lpFile;                                                                        
  27.         lpFile.hwnd=GetSafeHwnd();
  28.         lpFile.wFunc=FO_COPY;
  29.         lpFile.pFrom=SourceFolder;
  30.         lpFile.pTo=TargetFolder;
  31.         lpFile.fFlags=FOF_ALLOWUNDO;
  32.         lpFile.fAnyOperationsAborted=FALSE;
  33.         lpFile.hNameMappings=NULL;
  34.         lpFile.lpszProgressTitle=NULL;
  35.         int ReturnValue=SHFileOperation(&lpFile);
  36.         if(ReturnValue==0)
  37.         {
  38.                 if(lpFile.fAnyOperationsAborted==TRUE)
  39.                         SetDlgItemText(IDC_NOTE,"复制文件夹取消");
复制代码
  1. else
  2.                         SetDlgItemText(IDC_NOTE,"复制文件夹成功");
  3.         }
  4.         else
  5.                 SetDlgItemText(IDC_NOTE,"复制文件夹失败");
  6. }
  7. void CGkbc8Dlg::OnMulticopy()
  8. {
  9.         CString sFromDir,sToDir;
  10.         GetDlgItemText(IDC_EDIT1,sFromDir);
  11.         GetDlgItemText(IDC_EDIT2,sToDir);
  12.         if(sFromDir.IsEmpty()||sToDir.IsEmpty())
  13.                 return;
  14.         sToDir+=sFromDir.Right(sFromDir.GetLength()-sFromDir.ReverseFind('\\')-1);
  15.         if(!CopyFolder(sFromDir,sToDir))
  16.                 SetDlgItemText(IDC_NOTE,"复制文件夹失败");
  17.         else SetDlgItemText(IDC_NOTE,"复制文件夹成功");
  18. }
复制代码
我们来演示下功能实现的整个过程
请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:174.上位机VC MFC迭代复制文件夹及内部文件.rar 
文件大小:122.76 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

您的支持是我们创作的动力!  

  

您可花点闲钱积分自助任意充值

  

成为VIP会员 全站资源任意下载永久更新!


回复

使用道具 举报

快速回复 返回列表 客服中心 搜索