转自http://www./news/1007/444817.html SHFileOperations删除操作,pFrom接受变量传值时老是出错,搞了一晚上没查出原因,还好查到这位同学的资料,手工在字符串后面加2个'\0',就可以了,如果是直接手写路径,微软库自动作此处理了。 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有点相似,而且是作用十分相似。 |
|