利用boost.filesystem实现跨平台的复制目录功能

公司的开发主要都是基于boost库,以前都没有去了解过,所以借此机会学习了下boost,弄着弄着发现boost真心强大,很多模块真的太好用了,boost.filesystem就是很好的一个例子,操作目录文件啥的真心那叫方便啊,而且还是跨平台的,Linux下操作目录和文件就觉得挺繁琐的,写一个复制目录的小功能也得弄很多代码,下面是一段复制目录的代码,经测试可以很好的运行:

bool CopyDirectory(const std::string &strSourceDir, const std::string &strDestDir)
{
	boost::filesystem::recursive_directory_iterator end; //设置遍历结束标志,用recursive_directory_iterator即可循环的遍历目录
	boost::system::error_code ec;
	for (boost::filesystem::recursive_directory_iterator pos(strSourceDir); pos != end; ++pos)
	{
                //过滤掉目录和子目录为空的情况
		if(boost::filesystem::is_directory(*pos))
			continue;
		std::string strAppPath = boost::filesystem::path(*pos).string();
		std::string strRestorePath;
                //replace_first_copy在algorithm/string头文件中,在strAppPath中查找strSourceDir字符串,找到则用strDestDir替换,替换后的字符串保存在一个输出迭代器中
		boost::replace_first_copy(std::back_inserter(strRestorePath), strAppPath, strSourceDir, strDestDir);
		if(!boost::filesystem::exists(boost::filesystem::path(strRestorePath).parent_path()))
		{
			boost::filesystem::create_directories(boost::filesystem::path(strRestorePath).parent_path(), ec);
		}
		boost::filesystem::copy_file(strAppPath, strRestorePath, boost::filesystem::copy_option::overwrite_if_exists, ec);
	}
	if(ec)
	{
		return false;
	}
	return true;
}



你可能感兴趣的:(boost)