QQ登录

只需一步,快速开始

上位机MFC如何使用Shell操作文件

[ 复制链接 ]
文件的复制,移动等操作可以直接使用一个函数SHFileOperation来实现。例如复制一个文件:

  1. void CDemoDlg::OnCopyFile()
  2. {
  3.         CString strSrcFileName = _T("C:\\Demo.dat");
  4.         TCHAR szFrom[MAX_PATH];
  5.         for (int n = 0; n < MAX_PATH; n++)
  6.         {
  7.                 szFrom[n] = '\0';
  8.         }
  9.         StrCat(szFrom, strSrcFileName);

  10.         CString strDestFileName = _T("C:\\Copy of Demo.dat");
  11.         TCHAR szTo[MAX_PATH];
  12.         for (n = 0; n < MAX_PATH; n++)
  13.         {
  14.                 szTo[n] = '\0';
  15.         }
  16.         StrCat(szTo, strDestFileName);

  17.         //复制文件操作
  18.         SHFILEOPSTRUCT FileOp;
  19.         FileOp.hwnd = NULL;
  20.         FileOp.wFunc = FO_COPY;
  21.         FileOp.pFrom = szFrom;
  22.         FileOp.pTo = szTo;
  23.         FileOp.fFlags = FOF_SILENT;

  24.         if (SHFileOperation(&FileOp) == 0)
  25.         {
  26.                 AfxMessageBox(_T("复制文件成功。"));
  27.         }
  28.         else
  29.         {
  30.                 AfxMessageBox(_T("复制文件失败。"));
  31.         }
  32. }
复制代码
移动一个文件:

  1. void CDemoDlg::OnMoveFile()
  2. {
  3.         CString strSrcFileName = _T("C:\\Demo.dat");
  4.         TCHAR szFrom[MAX_PATH];
  5.         for (int n = 0; n < MAX_PATH; n++)
  6.         {
  7.                 szFrom[n] = '\0';
  8.         }
  9.         StrCat(szFrom, strSrcFileName);

  10.         CString strDestFileName = _T("D:\");
  11.         TCHAR szTo[MAX_PATH];
  12.         for (n = 0; n < MAX_PATH; n++)
  13.         {
  14.                 szTo[n] = '\0';
  15.         }
  16.         StrCat(szTo, strDestFileName);

  17.         //移动文件操作
  18.         SHFILEOPSTRUCT FileOp;
  19.         FileOp.hwnd = NULL;
  20.         FileOp.wFunc = FO_MOVE;
  21.         FileOp.pFrom = szFrom;
  22.         FileOp.pTo = szTo;
  23.         FileOp.fFlags = FOF_SILENT;

  24.         if (SHFileOperation(&FileOp) == 0)
  25.         {
  26.                 AfxMessageBox(_T("移动文件成功。"));
  27.         }
  28.         else
  29.         {
  30.                 AfxMessageBox(_T("移动文件失败。"));
  31.         }        
  32. }
复制代码
删除一个文件

  1. void CDemoDlg::OnDeleteFile()
  2. {
  3.         CString strSrcFileName = _T("C:\\Demo.dat");
  4.         TCHAR szFrom[MAX_PATH];
  5.         for (int n = 0; n < MAX_PATH; n++)
  6.         {
  7.                 szFrom[n] = '\0';
  8.         }
  9.         StrCat(szFrom, strSrcFileName);

  10.         //删除文件操作
  11.         SHFILEOPSTRUCT FileOp;
  12.         FileOp.hwnd = NULL;
  13.         FileOp.wFunc = FO_DELETE;
  14.         FileOp.pFrom = szFrom;
  15.         FileOp.pTo = NULL;
  16.         FileOp.fFlags = FOF_SILENT;

  17.         if (SHFileOperation(&FileOp) == 0)
  18.         {
  19.                 AfxMessageBox(_T("删除文件成功。"));
  20.         }
  21.         else
  22.         {
  23.                 AfxMessageBox(_T("删除文件失败。"));
  24.         }
  25. }
复制代码
重命名一个文件:
  1. void CDemoDlg::OnRenameFile()
  2. {
  3.         CString strSrcFileName = _T("C:\\Demo.dat");
  4.         TCHAR szFrom[MAX_PATH];
  5.         for (int n = 0; n < MAX_PATH; n++)
  6.         {
  7.                 szFrom[n] = '\0';
  8.         }
  9.         StrCat(szFrom, strSrcFileName);

  10.         CString strDestFileName = _T("C:\\New Demo.dat");
  11.         TCHAR szTo[MAX_PATH];
  12.         for (n = 0; n < MAX_PATH; n++)
  13.         {
  14.                 szTo[n] = '\0';
  15.         }
  16.         StrCat(szTo, strDestFileName);

  17.         //重命名文件操作
  18.         SHFILEOPSTRUCT FileOp;
  19.         FileOp.hwnd = NULL;
  20.         FileOp.wFunc = FO_RENAME;
  21.         FileOp.pFrom = szFrom;
  22.         FileOp.pTo = szTo;
  23.         FileOp.fFlags = FOF_SILENT;

  24.         if (SHFileOperation(&FileOp) == 0)
  25.         {
  26.                 AfxMessageBox(_T("重命名文件成功。"));
  27.         }
  28.         else
  29.         {
  30.                 AfxMessageBox(_T("重命名文件失败。"));
  31.         }
  32. }
复制代码
我们可以看到SHFileOperation传递进去的是一个SHFILEOPSTRUCT 结构体。
通过修改结构体实例的成员变量SHFILEOPSTRUCT FileOp;  FileOp.wFunc = FO_RENAME。就可以实现不同的功能。
函数执行成功与否可以通过其返回值进行判断。为0表示成功执行。
  

上位机VC MFC程序开发精典实例大全源码与视频讲解配套下载408例

  

经历1年的编程与录制点击进入查看


  

如果您认可,可联系功能定制!

  

如果您着急,充值会员可直接联系发您资料!

  

QQ联系我

微信扫扫联系我

  


回复

使用道具 举报

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