【问题标题】:C++: Error with Boost Filesystem copy_fileC++:Boost 文件系统 copy_file 出错
【发布时间】:2011-11-27 23:12:43
【问题描述】:

我在使用 copy_file 函数时遇到了一些问题。我的程序很简单,我只是想把一个文本文件从一个地方复制到另一个地方。

以下代码显示“调试错误!”因为 abort() 被调用了。

int main()
{
path src_path = "C:\\src.txt";
path dst_path = "C:\\dst.txt";

cout << "src exists = " << exists( src_path ) << endl;  // Prints True
boost::filesystem::copy_file( src_path, dst_path );

return 0;
}

如果我查看 Stackoverflow 上的其他一些代码示例,我不会注意到我做错了什么。我觉得我在这里遗漏了一些明显的东西。

我已经安装了 Boost v1.47,我正在使用 Visual C++ 2010。

【问题讨论】:

  • 权限或共享违规。您应该捕获异常并显示它们
  • 我查看了如何使用 try / catch 但我不确定如何或是否可以在不知道异常数据类型的情况下打印异常。到目前为止,我只能使用默认 (...) 捕获它。我认为文件系统引发了一个名为“basic_filesystem_error”的对象,该对象未在我的包含中导入。
  • try{/*code*/}catch(std::exception const&amp; e){ std::cout &lt;&lt; e.what() &lt;&lt; '\n'; } 会在有问题的异常源自std::exception 时执行。

标签: c++ boost boost-filesystem


【解决方案1】:

我猜目标文件存在。

docs:

template &lt;class Path1, class Path2&gt; void copy_file(const Path1&amp; from_fp, const Path2&amp; to_fp);

要求Path1::external_string_typePath2::external_string_type 是同一类型。

效果:将from_fp解析到的文件的内容和属性复制到to_fp解析到的文件中。 抛出basic_filesystem_error&lt;Path&gt;如果from_fp.empty()||to_fp.empty()||!exists(from_fp)||||!is_regular_file(from_fp)||exists(to_fp) >

这样一个简单的测试:

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

int main()
{
    using namespace boost::filesystem;
    path src_path = "test.in";
    path dst_path = "test.out";

    std::cout << "src exists = " << std::boolalpha << exists( src_path ) << std::endl;  // Prints true
    try
    {
        boost::filesystem::copy_file( src_path, dst_path );
    } catch (const boost::filesystem::filesystem_error& e)
    {
        std::cerr << "Error: " << e.what() << std::endl;
    }

    return 0;
}

打印:

src exists = true
Error: boost::filesystem::copy_file: File exists: "test.in", "test.out"

第二次运行:)

【讨论】:

  • 啊哈,你帮我弄明白了。这是一个两部分的问题。当我第一次尝试 copy_file 函数时,它尝试将文件复制到它已经存在的位置(您的解释)。然后我尝试了上面导致权限错误的代码,因为显然我的设置不允许我的程序将文件复制到根路径 C:\
  • @akaGrim:这是个好消息(在某​​种程度上,我应该得到两个接受 :) LOL)。感谢您的反馈
【解决方案2】:

我认为如果您使用的是 boost::filesystem2 它应该是 boost::filesystem2::copy(src_path,dest_path); copy_file 应该已被弃用。

【讨论】:

    猜你喜欢
    • 2016-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多