2017-02-15 80 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); 
} 

總之,謝謝!