I am trying to move a file from a location to another using boost::filesystem
.
I used boost::filesystem::rename
function but when I try to do that I have the following error.
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)
I understood that the problem is that I am trying to move a file from one folder into another mounted on a different volume.
Is there any solution different from
mv
in a call to std::systen
? Is there any other funciton in boost::filesystem
for what I want to achieve? I cannot find it myself.
I am working with g++ and linux.
If renaming a file (ultimately through the rename()
library call, whether it's wrapped up in boost::
or anything else) fails because the source and destination are on different file systems, the only option is to then copy the file and delete the original after verifying that the copy was complete and successful. This is what /bin/mv
does - it first tries a rename()
, and if the error code returned by it's failure indicates a cross-device link situation, it falls back to a copy and remove scenario.