C ++: ошибка с Boost FileSystem copy_file - PullRequest
2 голосов
/ 28 ноября 2011

У меня проблемы с функцией 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.

Ответы [ 2 ]

1 голос
/ 28 ноября 2011

Я предполагаю, что целевой файл существует.

документы :

template <class Path1, class Path2> void copy_file(const Path1& from_fp, const Path2& to_fp);

Требуется : Path1::external_string_type и Path2::external_string_type относятся к одному типу.

Эффекты : Содержимое и атрибуты файла, из которого разрешается файл from_fp, копируются в файл, в который разрешается to_fp. Броски : basic_filesystem_error<Path> если 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"

при втором запуске:)

0 голосов
/ 28 ноября 2011

Я думаю, что если вы используете boost :: filesystem2, это должно быть повышение :: filesystem2 :: копия (src_path, dest_path); copy_file должен быть устаревшим.

...