2013-03-01 139 views
1

即時通訊困難搞清楚爲什麼我的文件不會複製。下面的代碼的簡要部分:boost文件系統copy_file「成功」,但沒有複製文件

dir_itr是directory_iterator & root是路徑)

if (!(is_directory(dir_itr->path()))) 
{ 
    cout << "copying: " << dir_itr->path().filename() << endl; 
    try 
    { 
     copy(dir_itr->path(), root); 
     remove(dir_itr->path()); 
    } catch (filesystem_error& ex) { 
     //more code 

結果如在命令窗口如下:

boost::filesystem::copy_file: The operation completed successfully: 
"C:\Documents and Settings\R\Desktop\New Folder\New Folder (2)\New Bitmap Image 3.bmp", 
"C:\Documents and Settings\R\Desktop\New Folder" 

然而沒有文件是複製過來。

我基本上只是試圖從文件夾c:\x\y\file.file移動所述文件c:\x

我假設爲什麼我不能移動它,因爲我需要一個完整的文件名,而不只是一個目錄的東西?如果是這樣的話,我該如何將路徑根轉換爲字符串,以便我可以向其添加文件名? (IM剛開一千個錯誤,如果我去嘗試,他們這麼久我不能一路向後滾動的窗口看到它開始的地方)

+2

您的輸出與您的源代碼不符。我沒有看到任何「複製」陳述。 – 2013-03-01 02:07:28

+0

哦,我沒有複製所有的輸出,因爲在那裏有一個循環語句和更多的cout的。 「boost :: filesystem :: copy_file:操作成功完成:」加上接下來的兩行,是什麼是由boost文件系統自動打印的,當你使用copy_file函數時,輸出其實不是問題,它的只是我沒有看到任何結果 – user1324674 2013-03-01 02:15:07

+1

我寧願'boost :: filesystem'函數實際輸出字符串作爲其操作的一部分。你確定這不是來自別的東西嗎? – 2013-03-01 02:31:04

回答

1

也許boost::filesystem::system_complete可以幫助:

(對不起,我在我的Mac上,而不是Windows,但它顯示了從相對路徑獲取絕對路徑的方法)。祝你好運。

#include <iostream> 
#include <boost/filesystem.hpp> 

using namespace std; 

int main(int argc, char *argv[]) { 
    boost::filesystem::path cwd("."); 
    boost::filesystem::path resolved = boost::filesystem::system_complete(cwd); 

    std::cout << cwd << std::endl; 
    std::cout << resolved << std::endl; 
} 

輸出:

"." 
"/private/var/folders/qw/x23nm9f11fxc45rgddb04n_w0000gn/T/CodeRunner/." 
0

回來到這方面的工作,我添加/更改如下:

try 
{ 
    string temp = root.string() + "\\" + dir_itr->path().filename().string(); 
    path p(temp); 
    copy(dir_itr->path(), p); 
    remove(dir_itr->path()); 
//more code 

,它似乎工作。我想我假設在複製時需要包含文件名是正確的。

相關問題