码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-07-21 10:38:52      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:copyfile   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;
}

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

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

标签:copyfile   zip压缩   遍历文件夹   

原文地址:http://blog.csdn.net/qingzai_/article/details/46981507

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!