2013-03-01 4 views
1

им не удалось выяснить, почему мои файлы не копируются. Вот краткая часть кода:повысить файловую систему 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

Я предполагаю, почему я не могу двигаться это потому, что мне нужно полное имя файла, а не просто каталог или что-то? Если это так, как мне преобразовать корень пути в строку, чтобы я мог добавить к нему имя файла? (Им получаешь тысячу ошибок, если я даже попробовать, они так долго я не могу прокручивать весь путь обратно в окно, чтобы увидеть, где он начинается)

+2

Ваш результат не соответствует вашему исходному коду. Я не вижу никаких «копирующих» 'операторов. –

+0

О, я не копировал весь вывод, потому что theres loopstatement там и намного больше cout's. «boost :: filesystem :: copy_file: операция успешно завершена:« плюс следующие две строки »- это то, что автоматически печатается файловой системой boost, когда вы используете функцию copy_file, вывод действительно не проблема, его просто я не вижу никаких результатов. – user1324674

+1

Я довольно сомневаюсь, что функции 'boost :: filesystem' фактически выводят строки как часть их работы. Вы уверены, что это не что-то другое? –

ответ

1

boost::filesystem::system_complete Возможно может помочь:

(К сожалению, я m на моем Mac, а не в окнах, но он показывает способ получить абсолютный путь от относительного пути). Удачи.

#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 

И это, казалось, работало. Я предполагаю, что мое предположение о необходимости включать имя файла при копировании было правильным.