Неверный cross-device link ошибка с файловой системой boost

Я пытаюсь переместить файл из одного места в другое с помощью boost::filesystem. Я использовал boost::filesystem::rename функция, но когда я пытаюсь это сделать, у меня есть следующая ошибка.

terminate called after throwing an instance of 
'boost::filesystem::filesystem_error'
what():  boost::filesystem::rename: Invalid cross-device link: 
"./file_A.csv",    "/opt/data/file_B.csv"
Aborted (core dumped)

я понял, что проблема в том, что я пытаюсь переместить файл из одной папки в другую, установленный на другом томе.

есть ли решение отличается от

  1. копирование файла, а затем удалить его (это дает мне некоторое чувство безопасности).
  2. накрутка mv позвонил std::systen?

есть ли другой funciton в boost::filesystem для чего я хочу добиться? Я не могу найти его сам.

Я работаю с g++ и linux.

1 ответов


если переименование файла (в конечном итоге с помощью rename() вызов библиотеки, будь то завернутый в boost:: или что-нибудь еще) не удается, потому что источник и назначение находятся в разных файловых системах, единственный вариант-скопировать файл и удалить оригинал после проверки того, что копия была завершена и успешна. Это /bin/mv вообще - то сначала пытается rename(), и если код ошибки при неудаче это указывает на кросс-устройства ситуацией ссылке, он возвращается к копию и удалить сценарий.