1、拷贝文件夹以及文件夹内的文件
BOOL CMainFrame::CopyFolder(LPCTSTR lpszTo, LPCTSTR lpszFrom)//拷贝文件夹
{
SHFILEOPSTRUCT FileOp;
SecureZeroMemory((void*)&FileOp,sizeof(SHFILEOPSTRUCT));//secureZeroMemory和ZeroMerory的区别
//根据MSDN上,ZeryMerory在当缓冲区的字符串超出生命周期的时候,
//会被编译器优化,从而缓冲区的内容会被恶意软件捕捉到。
//引起软件安全问题,特别是对于密码这些比较敏感的信息而说。
//而SecureZeroMemory则不会引发此问题,保证缓冲区的内容会被正确的清零。
//如果涉及到比较敏感的内容,尽量使用SecureZeroMemory函数。
FileOp.fFlags = FOF_NOCONFIRMATION | FOF_RENAMEONCOLLISION; //操作与确认标志
FileOp.hNameMappings = NULL; //文件映射
FileOp.hwnd = NULL; //消息发送的窗口句柄;
FileOp.lpszProgressTitle = NULL; //文件操作进度窗口标题
FileOp.pFrom = lpszFrom; //源文件及路径
FileOp.pTo = lpszTo; //目标文件及路径
FileOp.wFunc = FO_COPY; //操作类型
return SHFileOperation(&FileOp) == 0;
}
//2016.6.1日跟新,解决了有时候无法复制的问题
BOOL CMainFrame::CopyFolder(CString lpszTo, CString lpszFrom)//拷贝文件夹
{
CHAR szFromPath[_MAX_PATH];//源文件路径
memcpy(szFromPath, lpszFrom, lpszFrom.GetLength());
szFromPath[lpszFrom.GetLength() + 1] = '\0';//必须要以“\0\0”结尾,不然删除不了
szFromPath[lpszFrom.GetLength() + 2] = '\0';
SHFILEOPSTRUCT FileOp;
SecureZeroMemory((void*)&FileOp, sizeof(SHFILEOPSTRUCT));//secureZeroMemory和ZeroMerory的区别
//根据MSDN上,ZeryMerory在当缓冲区的字符串超出生命周期的时候,
//会被编译器优化,从而缓冲区的内容会被恶意软件捕捉到。
//引起软件安全问题,特别是对于密码这些比较敏感的信息而说。
//而SecureZeroMemory则不会引发此问题,保证缓冲区的内容会被正确的清零。
//如果涉及到比较敏感的内容,尽量使用SecureZeroMemory函数。
FileOp.fFlags = FOF_NOCONFIRMATION; //操作与确认标志
FileOp.hNameMappings = NULL; //文件映射
FileOp.hwnd = NULL; //消息发送的窗口句柄;
FileOp.lpszProgressTitle = NULL; //文件操作进度窗口标题
FileOp.pFrom = szFromPath; //源文件及路径
FileOp.pTo = lpszTo; //目标文件及路径
FileOp.wFunc = FO_COPY; //操作类型
return SHFileOperation(&FileOp) == 0;
}
2、拷贝单个文件
BOOL CopyFile(
LPCTSTR lpExistingFileName, // pointer to name of an existing file
LPCTSTR lpNewFileName, // pointer to filename to copy to
BOOL bFailIfExists // flag for operation if file exists
);
其中各参数的意义:
LPCTSTR lpExistingFileName, // 你要拷贝的源文件名
LPCTSTR lpNewFileName, // 你要拷贝的目标文件名
BOOL bFailIfExists // 如果目标已经存在,不拷贝(True)并返回False,覆盖目标(false)
如:
//拷贝文件c:\log.txt到d:\log.txt,如果D:\log.txt已经存在,就覆盖
CopyFile("c:\\log.txt","d:\\log.txt",false);