当前所在位置:珠峰网资料 >> 计算机 >> 计算机等级考试 >> 正文
vc对文件夹的操作SHFileOperation()的使用
发布时间:2010/7/5 15:34:27 来源:城市学习网 编辑:ziteng
  SHFileOperation()函数主要对文件夹有四种操作:复制,删除,移动,重命名。
  挤时间对这个函数进行了利用了一下。写了四个函数。可以很好的对文件夹进行操作。
  /////////////////////////////////////
  //函数名:DeleteFolder
  //输入参数:LpszPath 要删除的路径指针
  //作用:删除指定文件夹以及里面的文件
  //
  /////////////////////////////////////
  BOOL DeleteFolder(LPCTSTR lpszPath)
  {
  int nLength = strlen(lpszPath);
  char *NewPath = new char[nLength+2];
  strcpy(NewPath,lpszPath);
  NewPath[nLength] = '\0';
  NewPath[nLength+1] = '\0';
  SHFILEOPSTRUCT FileOp;
  ZeroMemory((void*)&FileOp,sizeof(SHFILEOPSTRUCT));
  FileOp.fFlags = FOF_NOCONFIRMATION;
  FileOp.hNameMappings = NULL;
  FileOp.hwnd = NULL;
  FileOp.lpszProgressTitle = NULL;
  FileOp.pFrom = NewPath;
  FileOp.pTo = NULL;
  FileOp.wFunc = FO_DELETE;
  return SHFileOperation(&FileOp) == 0;
  }
  /////////////////////////////////////
  //函数名:CopyFolder
  //参数:lpszFromPath 源文件夹的路径 。 lpszToPath 目的文件夹的路径
  //作用:拷贝文件夹及其文件夹中的所有内容
  //
  //////////////////////////////////////
  BOOL CopyFolder(LPCTSTR lpszFromPath,LPCTSTR lpszToPath)
  {
  int nLengthFrm = strlen(lpszFromPath);
  char *NewPathFrm = new char[nLengthFrm+2];
  strcpy(NewPathFrm,lpszFromPath);
  NewPathFrm[nLengthFrm] = '\0';
  NewPathFrm[nLengthFrm+1] = '\0';
  SHFILEOPSTRUCT FileOp;
  ZeroMemory((void*)&FileOp,sizeof(SHFILEOPSTRUCT));
  FileOp.fFlags = FOF_NOCONFIRMATION ;
  FileOp.hNameMappings = NULL;
  FileOp.hwnd = NULL;
  FileOp.lpszProgressTitle = NULL;
  FileOp.pFrom = NewPathFrm;
  FileOp.pTo = lpszToPath;
  FileOp.wFunc = FO_COPY;
  return SHFileOperation(&FileOp) == 0;
  } [NextPage]   /////////////////////////////////////
  //函数名:MoveFolder
  //参数:lpszFromPath 源文件夹路径 。lpszToPath 目的文件夹路径
  //作用:移动原文件夹及其中文件都指定的路径下
  //
  /////////////////////////////////////
  BOOL MoveFolder(LPCTSTR lpszFromPath,LPCTSTR lpszToPath)
  {
  int nLengthFrm = strlen(lpszFromPath);
  char *NewPathFrm = new char[nLengthFrm+2];
  strcpy(NewPathFrm,lpszFromPath);
  NewPathFrm[nLengthFrm] = '\0';
  NewPathFrm[nLengthFrm+1] = '\0';
  SHFILEOPSTRUCT FileOp;
  ZeroMemory((void*)&FileOp,sizeof(SHFILEOPSTRUCT));
  FileOp.fFlags = FOF_NOCONFIRMATION ;
  FileOp.hNameMappings = NULL;
  FileOp.hwnd = NULL;
  FileOp.lpszProgressTitle = NULL;
  FileOp.pFrom = NewPathFrm;
  FileOp.pTo = lpszToPath;
  FileOp.wFunc = FO_MOVE;
  return SHFileOperation(&FileOp) == 0;
  }
  /////////////////////////////////////
  //ReNameFolder
  //参数:lpszFromPath 源文件夹路径 。lpszToPath 目的文件夹路径
  //作用:修改原文件夹的名字。
  //
  /////////////////////////////////////
  BOOL ReNameFolder(LPCTSTR lpszFromPath,LPCTSTR lpszToPath)
  {
  int nLengthFrm = strlen(lpszFromPath);
  char *NewPathFrm = new char[nLengthFrm+2];
  strcpy(NewPathFrm,lpszFromPath);
  NewPathFrm[nLengthFrm] = '\0';
  NewPathFrm[nLengthFrm+1] = '\0';
  SHFILEOPSTRUCT FileOp;
  ZeroMemory((void*)&FileOp,sizeof(SHFILEOPSTRUCT));
  FileOp.fFlags = FOF_NOCONFIRMATION ;
  FileOp.hNameMappings = NULL;
  FileOp.hwnd = NULL;
  FileOp.lpszProgressTitle = NULL;
  FileOp.pFrom = NewPathFrm;
  FileOp.pTo = lpszToPath;
  FileOp.wFunc = FO_RENAME;
  return SHFileOperation(&FileOp) == 0;
  }
  这四个函数在VC6.0下通过测试了一下,效果还是有的。不过感觉,FO_RENAME和FO_MOVE有点相似,而且是作用十分相似。
广告合作:400-664-0084 全国热线:400-664-0084
Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号
珠峰网 版权所有 All Rights Reserved