У меня проблемы с выяснением, почему мои файлы не копируются. Вот краткая часть кода:
(dir_itr
является каталогом_тератора & 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
Я предполагаю, почему я не могу переместить это потому, что мне нужно полное имя файла, а не просто каталог или что-то еще? Если это так, как мне преобразовать путь корня в строку, чтобы я мог добавить к нему имя файла? (я получаю тысячу ошибок, если я даже попробую, они настолько длинные, что я не могу прокрутить весь путь вверх по окну, чтобы увидеть, где оно начинается)
возможно повышение :: файловая система :: 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/."
Вернулся к работе над этим, и я добавил / изменил следующее:
try
{
string temp = root.string() + "\\" + dir_itr->path().filename().string();
path p(temp);
copy(dir_itr->path(), p);
remove(dir_itr->path());
//more code
И это, казалось, сработало. Я предполагаю, что мое предположение о необходимости включать имя файла при копировании было правильным.