2017-02-15 66 views
0

我试图备份用户简档文件夹备份(或更准确地复制特定的目录,例如用户名 \文件,用户名 \桌面等),以一个网络共享驱动器。我使用的是C++ builder(10.1 starter),因此仅限于提升1.55。C++ - 更新/反射镜与提高文件系统(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

回答我的问题,copy_file方法的优点是可以传递给它的第三个参数 -​​。如果你把nijansen's copyDir method并添加此选项将copy_file调用,它将如果它已经存在覆盖文件(更新在从活动备份的文件)。

函数调用就变成了:

fs::copy_file(current, 
    destination/current.filename(), 
    fs::copy_option::overwrite_if_exists); 

而且,对于任何人谁在这个问题绊倒,我也想出了一个办法,以排除文件/从copy_file(目录中的if语句添加到“其他“,做副本的copyDir方法中。

// Need to exclude My Music, My Pictures, My Videos (from Documents folder) 
std::string stem = current.filename().string(); 
//If not equal to excludes, then copy away; else skips them 
if (!(stem == "My Music" || stem == "My Pictures" || stem == "My Videos")) 
{ 
    fs::copy_file(current,destination/current.filename(), 
     fs::copy_option::overwrite_if_exists); 
} 

总之,谢谢!