vc复制指定文件夹以及文件夹内的内容

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

展开阅读全文

没有更多推荐了,返回首页