工控编程吧

标题: 上位机MFC如何使用Shell操作文件 [打印本页]

作者: qq263946146    时间: 2019-8-2 14:45
标题: 上位机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表示成功执行。
[MFC408]1[/MFC408]
[weixinlianxi]1[/weixinlianxi]






欢迎光临 工控编程吧 (https://www.gkbc8.com/) Powered by Discuz! X3.4