vc中文件夹的复制,删除,移动,重命名

发布时间:2016年4月8日 作者:未知 查看次数:1201

vc使用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有点相似,而且是作用十分相似。

转载自:http://www.educity.cn/develop/457810.html
http://blog.csdn.net/ouchengguo/article/details/22481743


 



版权所有!www.sieye.cn
E.Mail:sieye@sohu.com QQ:66697110