The std.file rename method fails in the docker environment.

Jonathan M Davis newsgroup.d at jmdavisprog.com
Wed Mar 13 21:21:21 UTC 2024


On Wednesday, March 13, 2024 3:03:30 PM MDT zoujiaqing via Digitalmars-d-learn 
wrote:
> upload file to server in docker, but upload directory volume to
> host machine.
>
> Exception error:
> ```
> Invalid cross-device link
> ```
>
> Have other function like move(a, b) ?
>
> https://github.com/huntlabs/hunt-framework/blob/master/source/hunt/framework
> /file/File.d#L102

Well, the subject of your post mentions std.file, and then you link to a
framework that does basically the same thing. So, I don't know what you're
actually using.

However, both of those functions use the OS function, rename, which renames
the file within a file system, but it can't move files across file systems.
Strictly speaking, it's not possible to move a file across file systems.
What a program like mv does when the destination is on a different file
system from the source file is copy the file and then delete the original.
So, if you want to "move" a file across file systems within your program,
you'll have to do the same thing.

There may be a projcet on code.dlang.org which has a function which tries to
move the file within the file system and then does a copy and remove instead
if moving within the file system doesn't work, but otherwise, you'll have to
implement that yourself, which could be as simple as catching the any
exceptions from move and then attempting to copy the file and then remove it
if an exception was thrown.

- Jonathan M Davis





More information about the Digitalmars-d-learn mailing list