简体   繁体   中英

Invalid cross-device link error with boost filesystem

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

  1. COPYING the file and then DELETE it (it gives me some feeling of security).
  2. wrapping 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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM