EVC下把一个文件夹复制到另一个目录

一:

CString   StrSourceFolder=_T( "//硬盘//新建文件夹 ");
CString   StrDestFolder=_T( "//Hard   Disk ");
        TCHAR   SourceFolder[MAX_PATH+1]=_T( " ");
wcscpy(SourceFolder,StrSourceFolder);
TCHAR   TargetFolder[MAX_PATH+1]=_T( " ");
wcscpy(TargetFolder,StrDestFolder);
SHFILEOPSTRUCT   lpFile;
lpFile.hwnd=GetSafeHwnd();
lpFile.wFunc=FO_COPY;
lpFile.pFrom=SourceFolder;
lpFile.pTo=TargetFolder;
lpFile.fFlags=FOF_ALLOWUNDO;
lpFile.fAnyOperationsAborted=FALSE;
lpFile.hNameMappings=NULL;
lpFile.lpszProgressTitle=NULL;
int   ReturnValue=SHFileOperation(&lpFile);
if   (ReturnValue==0)
{
if   (lpFile.fAnyOperationsAborted==TRUE)
        MessageBox(_T( "复制文件夹操作被取消 "),_T( "信息提示 "),MB_OK+MB_ICONWARNING);
                else
MessageBox(_T( "备份文件夹操作成功 "),_T( "信息提示 "),MB_OK+MB_ICONWARNING);
   
}
else
MessageBox(_T( "复制文件夹操作失败 "),_T( "信息提示 "),MB_OK+MB_ICONEXCLAMATION);

 

二:

BOOL   CopyFromTo(const   TCHAR   *   source,const   TCHAR   *   dest)
{
HANDLE   hFileFind   =   INVALID_HANDLE_VALUE;
WIN32_FIND_DATA   wfd;
TCHAR   szTemp[MAX_PATH]   =   {0};
TCHAR   szTemp2[MAX_PATH]={0};

_stprintf(szTemp,_T( "%s//*.* "),source);
hFileFind   =   FindFirstFile(szTemp,&wfd);
if(hFileFind   ==   INVALID_HANDLE_VALUE)
return   FALSE;
do
{
if(   wfd.cFileName   !=   _T( ". ")   &&   wfd.cFileName   !=   _T( ".. ")   )
{
if(wfd.dwFileAttributes   &   FILE_ATTRIBUTE_DIRECTORY)
{
memset(szTemp,0x00,sizeof(szTemp));
memset(szTemp2,0x00,sizeof(szTemp2));
_stprintf(szTemp,_T( "%s//%s "),source,wfd.cFileName);
_stprintf(szTemp2,_T( "%s//%s "),dest,wfd.cFileName);
CreateDirectory(szTemp2,NULL);
CopyFromTo(szTemp,szTemp2);
}
else
{
memset(szTemp,0x00,sizeof(szTemp));
memset(szTemp2,0x00,sizeof(szTemp2));
_stprintf(szTemp,_T( "%s//%s "),source,wfd.cFileName);
_stprintf(szTemp2,_T( "%s//%s "),dest,wfd.cFileName);
CopyFile(szTemp,szTemp2,FALSE);
}
}
}while(FindNextFile(hFileFind,&wfd));
FindClose(hFileFind);
return   TRUE;
}

 

三:

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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值