我正在尝试备份用户个人资料(或者更准确地将特定目录,例如用户名 \ documents,用户名 \ desktop等)复制到网络共享驱动器。我正在使用C ++ builder(10.1 starter),因此仅限于提升1.55。
我已经在nijansen找到了这个copyDir方法,但它有一个问题:当尝试复制到已存在的目录时,它会因为这段代码而“中断”:
if(fs::exists(destination))
{
std::cerr << "Destination directory " << destination.string()
<< " already exists." << '\n';
return false;
}
显然我可以将其更改为删除目录(如果存在),然后返回而不是让它继续复制,但我正在寻找更多。
我想要做的是将目录从原始镜像镜像到备份(如robocopy的/ MIR标志(包括子目录))。如果我今天备份用户,那么他们会删除一些内容,创建更多内容,编辑文档等等。我想将这些更改复制到明天的备份中(而不是重新备份所有未更改的内容)。有些用户拥有50多GB的数据,如果我只是删除他们的“昨天”备份文件夹并创建一个全新的备份,则需要花费太长时间。
摘要:有没有办法使用BOOST在源和目标之间镜像(而不仅仅是复制!)目录树?
非常感谢任何帮助和/或示例!提前谢谢!
答案 0 :(得分:0)
要回答我自己的问题,copy_file
方法有一个可以传递给它的第三个参数 - fs::copy_option::overwrite_if_exists
。如果您使用nijansen's copyDir method并将此选项添加到copy_file
调用,则会覆盖已存在的文件(从实时更新备份中的文件)。
然后函数调用变为:
fs::copy_file(current,
destination / current.filename(),
fs::copy_option::overwrite_if_exists);
此外,对于任何偶然发现此问题的人,我还想出了一种从copy_file
中排除文件/目录的方法(将if语句添加到{else}中执行复制的“else”方法。
copyDir
无论如何,谢谢!