1

我无法弄清楚为什么我的文件不会复制。这是代码的简短部分:

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.filec:\x

我假设为什么我不能移动它是因为我需要一个完整的文件名而不仅仅是一个目录或什么?如果是这种情况,如何将路径根转换为字符串,以便向其添加文件名?(如果我尝试,我会遇到一千个错误,它们太长了,我无法一直滚动到窗口以查看它从哪里开始)

4

2 回答 2

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/."
于 2013-03-01T02:54:38.770 回答
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

它似乎奏效了。我想我在复制时需要包含文件名的假设是正确的。

于 2013-03-04T17:51:49.673 回答