以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 C/C++编程思想 』  (http://bbs.xml.org.cn/list.asp?boardid=61)
----  如何使用SHFileOperation()?  (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=87916)


--  作者:葛靖青001
--  发布时间:11/24/2010 3:23:00 PM

--  如何使用SHFileOperation()?
【转自互联网】

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;

  }
/////////////////////////////////////

  //函数名: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有点相似,而且是作用十分相似。


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
31.250ms