C ++ - 使用BOOST Filesystem更新/镜像文件夹备份(1.55)

时间:2017-02-15 20:07:27

标签: c++ boost-filesystem

我正在尝试备份用户个人资料(或者更准确地将特定目录,例如用户名 \ 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在源和目标之间镜像(而不仅仅是复制!)目录树?

非常感谢任何帮助和/或示例!提前谢谢!

1 个答案:

答案 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

无论如何,谢谢!