一、选择文件

其中CFileDialog类中的参数OFN_ALLOWMULTISELECT表示多个文件的选择,若只需要选择一个文件,删除该参数即可。

/// <summary>
/// 选择多个文件路劲
/// </summary>
/// <param name="FilesPath">输出文件路径</param>
/// <param name="FilesName">输出文件名</param>
/// <returns>返回文件个数</returns>
int SelectMultFilesPath(CString* FilesPath, CString* FilesName)
{CFileDialog fileDlg(true, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_ALLOWMULTISELECT, _T("all Files (*.*)|*.*||"), NULL);CString inPath;CArray<CString, CString> aryFilePath;CArray<CString, CString> aryFileName;if (fileDlg.DoModal() == IDOK)    //弹出对话框{POSITION posFile = fileDlg.GetStartPosition();CString filePath = _T("");while (posFile != NULL){filePath = fileDlg.GetNextPathName(posFile);aryFilePath.Add(filePath);aryFileName.Add(filePath.Right(filePath.GetLength() - filePath.ReverseFind('\\') - 1));}}int SelFileNum = aryFilePath.GetSize();//获取选择的文件数if (SelFileNum == 0){return 0;}CString   strMultFilesPath = _T("");for (size_t i = 0; i < SelFileNum; i++){*FilesPath += (aryFilePath[i] + _T(";"));*FilesName += (aryFileName[i] + _T(";"));}return SelFileNum;}

二、选择文件夹


/// <summary>
/// 选择文件夹
/// </summary>
/// <returns>返回文件夹路径</returns>
CString SelectFloderPath()
{TCHAR           szFolderPath[MAX_PATH] = { 0 };CString         strFolderPath = TEXT("");BROWSEINFO      sInfo;::ZeroMemory(&sInfo, sizeof(BROWSEINFO));sInfo.pidlRoot = 0;sInfo.lpszTitle = _T("请选择处理结果存储路径");sInfo.ulFlags = BIF_RETURNONLYFSDIRS | BIF_EDITBOX | BIF_DONTGOBELOWDOMAIN;sInfo.lpfn = NULL;// 显示文件夹选择对话框  LPITEMIDLIST lpidlBrowse = ::SHBrowseForFolder(&sInfo);if (lpidlBrowse != NULL){// 取得文件夹名  if (::SHGetPathFromIDList(lpidlBrowse, szFolderPath)){strFolderPath = szFolderPath;}}if (lpidlBrowse != NULL){::CoTaskMemFree(lpidlBrowse);}return strFolderPath;}

三、拷贝文件

/// <summary>
/// 文件拷贝
/// </summary>
/// <param name="copyFilePath">拷贝文件路径</param>
/// <param name="pasteFilePath">粘贴文件路径</param>
void CopyFile(CString copyFilePath,CString pasteFilePath)
{BOOL rec = PathFileExists(pasteFilePath);if (rec){UINT flag = MessageBox(0, _T("确认要覆盖已存在文件" + pasteFilePath + "吗?"), TEXT("温馨提示"), MB_YESNO | MB_ICONQUESTION);if (flag == IDNO)return;else{if (!DeleteFile(pasteFilePath)){CString strTempPath;strTempPath.Format(L"删除%s失败,请手动清除。", pasteFilePath);AfxMessageBox(strTempPath);}}}BOOL m = CopyFile(copyFilePath, pasteFilePath, TRUE);if (!m)MessageBox(0,_T("文件已经存在,导入失败!"), TEXT("错误提醒"),MB_OK | MB_ICONERROR);//这里是添加消息提示
}

四、拷贝文件夹

/// <summary>
/// 文件夹删除
/// </summary>
/// <param name="strDir">删除文件夹路径</param>
static void DeleteFloder(const CString& strDir)
{if (strDir.IsEmpty()){RemoveDirectory(strDir);return;}//首先删除文件及子文件夹CFileFind  ff;BOOL bFound = ff.FindFile(strDir + _T("\\*"), 0);while (bFound){bFound = ff.FindNextFile();if (ff.GetFileName() == _T(".") || ff.GetFileName() == _T(".."))continue;//去掉文件(夹)只读等属性SetFileAttributes(ff.GetFilePath(), FILE_ATTRIBUTE_NORMAL);if (ff.IsDirectory()){//递归删除子文件夹DeleteFloder(ff.GetFilePath());if (!RemoveDirectory(ff.GetFilePath())){CString strTempPath;strTempPath.Format(L"删除%s失败,请手动清除。", ff.GetFilePath());AfxMessageBox(strTempPath);}}else{if (!DeleteFile(ff.GetFilePath())){CString strTempPath;strTempPath.Format(L"删除%s失败,请手动清除。", ff.GetFilePath());AfxMessageBox(strTempPath);}}}ff.Close();
}/// <summary>
/// 文件夹拷贝
/// </summary>
/// <param name="copyFloder">拷贝文件夹路径</param>
/// <param name="pasteFloder">粘贴文件夹路径</param>
void CopyFloder(CString copyFloder, CString pasteFloder)
{BOOL rec = PathFileExists(pasteFloder);if (rec){UINT flag = MessageBox(0, _T("确认要覆盖已存在文件夹" + pasteFloder + "吗?"), TEXT("温馨提示"), MB_YESNO | MB_ICONQUESTION);if (flag == IDNO)return;else{DeleteFloder(pasteFloder);}}CreateDirectory(pasteFloder, NULL); //获取目标拷贝的路径 拷贝至哪里CFileFind finder;CString path = copyFloder + _T("\\*.*"); //需要拷贝的文件的路径// AfxMessageBox(path);  //调试用bool bWorking = finder.FindFile(path);  //是否找到了需要拷贝的文件的路径while (bWorking) {bWorking = finder.FindNextFile();//AfxMessageBox(finder.GetFileName());  //调试用if (finder.IsDirectory() && !finder.IsDots()) { //是不是有效的文件夹CopyFloder(finder.GetFilePath(), pasteFloder + _T("\\") + finder.GetFileName()); //递归查找文件夹}else { //是文件则直接复制 CopyFile(finder.GetFilePath(), pasteFloder + _T("\\") + finder.GetFileName(), TRUE);  //拷贝文件夹下的所有文件}}
}

MFC初探 —— 文件与文件夹的选择与拷贝相关推荐

  1. mfc中文本文件和文件夹的复制移动

    mfc中文本文件和文件夹的复制移动 1.文件的移动 BOOL bMoveOK = MoveFile(_T("D:\\log.txt"), _T("D:\\1\\789.t ...

  2. C++文件和文件夹选择

    一.MFC版本 WinFileSelectDlg.h #pragma once #ifdef WIN32 #include <afxdlgs.h> #include <dlgs.h& ...

  3. MFC获取文件及文件夹

    前言: 转载请附上连接,本帖原创请勿照抄. 主界面: .h文件 // Test_FileDlg.h: 头文件 //#pragma once// CTestFileDlg 对话框 class CTest ...

  4. 如何用c#打开文件夹并选择文件夹内的一个文件 open folder and select file

    如何用c#打开文件夹并选择文件夹内的一个文件 open folder and select file: 在运行中可以输入"Explorer /select,D:\somefile.txt&q ...

  5. Windows下,文件(夹)选择/打开对话框的三种创建方式

    Windows编程时,常用到打开文件(夹)对话框,选择文件或者多个文件的功能.Windows提供了好几种方式,现在做个总结,也好方便以后的使用. 常用的方式有三种: 1.1 使用OPENFILENAM ...

  6. Bat调用/弹出文件或文件夹选择对话框

    弹出文件夹选择框 @echo off rem 弹出文件夹浏览选择对话框 set #=Any question&set @=WX&set $=Q&set/az=0x53b7e0b ...

  7. html设置选择多个文件,选取多个连续文件或文件夹 怎样在文件夹中一次选中多个文件?...

    在Windows资源管理器中,选定多个连续文件的操作为 (A) 按住Shift键,单击每一个要选定的文件名 (B) 按住Alt键,单击每一个ctrl键.一,选定单个文件或文件夹:单击该文件或文件夹.二 ...

  8. matlab 选择文件夹、选择文件GUI和逐一读取文件夹中的文件

    matlab 选择文件夹.选择文件GUI和逐一读取文件夹中的文件 1. 选择文件夹路径: filepath = uigetdir('*.*','请选择文件夹');%fliepath为文件夹路径 2. ...

  9. 使用C#选择文件夹、打开文件夹、选择文件

    使用C#选择文件夹.打开文件夹.选择文件 - 摩根船长 - 博客园 http://www.cnblogs.com/szytwo/archive/2012/03/21/2410041.html usin ...

最新文章

  1. React学习笔记4: React脚手架配置代理
  2. SD-WAN的体系结构是如何提高网络灵活性和效率?
  3. 【学术相关】博士毕业也会看第一学历吗?
  4. Bean放入Spring容器,你知道几种方式?
  5. IDEA和mysql的连接
  6. 跨系统服务器data,oracle 新增pdb环境,并通过database link实现跨服务器在线克隆
  7. Spatial Transformer Networks
  8. bzoj 2152: 聪聪可可(树的点分治)
  9. spring cloud报错解决:java.lang.ClassNotFoundException: com.netflix.servo.monitor.Monitors
  10. ubuntu如何更改crontab的默认编辑器
  11. PHP批量插入多条数据到Mysql报错:Mysql Prepared statement contains too many placeholders
  12. MySQL-快速入门(1)基本数据库、表操作语句
  13. [Jetty] jetty 内存调优
  14. 保姆级教学,起点中文网字体反爬。
  15. 如何做好项目进度管理
  16. python opencv Shi-Tomasi 角点检测和特征跟踪
  17. 基于Android的医院预约挂号系统
  18. 运用supervisor管理thinkqueue 和swoole推送
  19. python实验原理_Python实现蒙特卡洛算法小实验过程详解
  20. 键盘按键名称及HID扫描码及VK虚拟键码对照表

热门文章

  1. antares harmony engine安装_PS CC2017安装教程
  2. #{}不自动改参数类型_我是干流动补胎的,想让我的柴油机气泵自动打气,怎么改装。谢谢。...
  3. PHP判断客户端协议类型是否为https
  4. div 置底 形成页脚
  5. C语言学习笔记---位字段
  6. keil编译器如何生成二进制bin文件
  7. keil中如何查看代码大小
  8. 一步一步带你搭建SpringCloud微服务
  9. JSON和JS数据类型转化
  10. TensorFlow神经网络(五)输入手写数字图片进行识别