我无法弄清楚为什么我的文件不会复制。这是代码的一小部分:
(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
我在假设为什么我不能移动它是因为我需要一个完整的文件名而不仅仅是一个目录或什么?如果是这种情况,我如何将路径根转换为字符串,以便我可以添加文件名? (如果我尝试的话,我会得到一千个错误,它们很长,我不能一直向后滚动窗口以查看它的开始位置)
答案 0 :(得分: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/."
答案 1 :(得分: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
它似乎有效。我想我在复制时需要包含文件名的假设是正确的。