当前位置: 代码迷 >> VC/MFC >> vc复制文件夹实现(可以复制三层途径)以及zip压缩实现
  详细解决方案

vc复制文件夹实现(可以复制三层途径)以及zip压缩实现

热度:1189   发布时间:2016-05-02 03:57:53.0
vc复制文件夹实现(可以复制三层路径)以及zip压缩实现
#include <boost\filesystem.hpp>#include <KHAboutLocalEnvirTool.h>#include <string>#include "XZip.h"//复制文件夹实现void copy_all_file(LPCSTR file_path, std_string &backup_path) //第一个参数为被复制文件,第二个是复制到的地址{	if(!(boost::filesystem::exists(backup_path.c_str())))//判断备份文件的目录是否存在,不存在则创建	{    		boost::filesystem::create_directory(backup_path.c_str());//目录不存在,创建   	}  	std::vector< std_string > file_list ;	std_string path(file_path);	path.Append("\\");	file_list(file_path, file_list );//获取文件列表,通过findfirstfile实现	for ( auto it = file_list.begin(); it != file_list.end() ; it++ )	{		std_string file_name = (*it);//文件路径		std_string file_path_str;		file_path_str.Assign(file_name.c_str());		file_name.Replace(path.c_str(), "");//数据库文件名		std_string copyfile_path,copyfile_dir;		copyfile_dir.Append(backup_path.c_str());		copyfile_dir.Append(file_name.c_str());		copyfile_path.Assign(copyfile_dir.c_str());		copyfile_dir.erase(copyfile_dir.rfind("\\"), copyfile_dir.size());		if(!(boost::filesystem::exists(copyfile_dir.c_str())))     		{  			boost::filesystem::path dir_pa(copyfile_dir.c_str());			dir_pa = dir_pa.parent_path();			if (!boost::filesystem::exists(dir_pa))			{				boost::filesystem::create_directory(dir_pa);//父目录不存在就创建  			}			boost::filesystem::create_directory(copyfile_dir.c_str());//目录不存在就创建   		}		CopyFileA(file_path_str.c_str(),copyfile_path.c_str(), TRUE );	}}//zip文件压缩实现HZIP hz_res_value = CreateZip(CA2T(file_path.c_str()), 0 , ZIP_FILENAME);if ( hz_res_value ){	std::vector< std_string > file_list ;	file_list(backup_dir_path.c_str(), file_list );	for ( auto it = file_list.begin(); it != file_list.end() ; it++ )	{		std_string file_name = (*it);//文件路径		file_name.Replace(path_str.c_str(), "");//数据库文件名,ptr为其父路径		ZRESULT zRet = ZipAdd( hz_res_value, CA2T(file_name.c_str()), CA2T((*it).c_str()), NULL, ZIP_FILENAME );	}	CloseZip( hz_res_value );}void file_list(LPCSTR szPath, std::vector< std_string > & flist ){	if (szPath == NULL)	{		return;	}	WIN32_FIND_DATAA FindFileData;	HANDLE hListFile;	CHAR szFilePath[MAX_PATH] = { 0 };	std_string str_file_path(szPath);	if (!str_file_path.EndsWith("\\"))	{		str_file_path.push_back('\\');	}	std::string new_dir = szPath;	str_file_path.push_back('*');	//查找第一个文件/目录,获得查找句柄	hListFile = FindFirstFileA(str_file_path.c_str(), &FindFileData);	//判断句柄	if (hListFile == INVALID_HANDLE_VALUE)	{		return;	}	else	{		do		{			if (strcmp(FindFileData.cFileName, ".") == 0 || strcmp(FindFileData.cFileName, "..") == 0)			{				continue;			}								std::string _new_dir = new_dir +"\\"+ FindFileData.cFileName;			//判断文件属性,目录			if (FindFileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)			{				file_list(_new_dir.c_str(), flist);				//RemoveDirectoryA(_new_dir.c_str());			}			else			{				flist.push_back(_new_dir.c_str());			}			//读者可根据文件属性表中的内容自行添加判断文件属性。		} while (FindNextFileA(hListFile, &FindFileData));	}	FindClose(hListFile);	return;}

版权声明:本文为博主原创文章,未经博主允许不得转载。

  相关解决方案