Неверный 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(), и если код ошибки при неудаче это указывает на кросс-устройства ситуацией ссылке, он возвращается к копию и удалить сценарий.