公司的开发主要都是基于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;
}
版权声明:本文为Enter_原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。