以文本方式查看主题 - 中文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 |