Неверный 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)
я понял, что проблема в том, что я пытаюсь переместить файл из одной папки в другую, установленный на другом томе.
есть ли решение отличается от
- копирование файла, а затем удалить его (это дает мне некоторое чувство безопасности).
- накрутка
mv
позвонилstd::systen
?
есть ли другой funciton в boost::filesystem
для чего я хочу добиться? Я не могу найти его сам.
Я работаю с g++ и linux.
1 ответов
если переименование файла (в конечном итоге с помощью rename()
вызов библиотеки, будь то завернутый в boost::
или что-нибудь еще) не удается, потому что источник и назначение находятся в разных файловых системах, единственный вариант-скопировать файл и удалить оригинал после проверки того, что копия была завершена и успешна. Это /bin/mv
вообще - то сначала пытается rename()
, и если код ошибки при неудаче это указывает на кросс-устройства ситуацией ссылке, он возвращается к копию и удалить сценарий.