pub fn copy<P: AsRef<Path>, Q: AsRef<Path>>(from: P, to: Q) -> Result<u64>
Expand description
Copies the contents of one file to another. This function will also copy the permission bits of the original file to the destination file.
This function will overwrite the contents of to
.
Note that if from
and to
both point to the same file, then the file
will likely get truncated by this operation.
On success, the total number of bytes copied is returned and it is equal to
the length of the to
file as reported by metadata
.
If you’re wanting to copy the contents of one file to another and you’re
working with File
s, see the io::copy()
function.
Platform-specific behavior
This function currently corresponds to the open
function in Unix
with O_RDONLY
for from
and O_WRONLY
, O_CREAT
, and O_TRUNC
for to
.
O_CLOEXEC
is set for returned file descriptors.
On Linux (including Android), this function attempts to use copy_file_range(2)
,
and falls back to reading and writing if that is not possible.
On Windows, this function currently corresponds to CopyFileEx
. Alternate
NTFS streams are copied but only the size of the main stream is returned by
this function.
On MacOS, this function corresponds to fclonefileat
and fcopyfile
.
Note that platform-specific behavior may change in the future.
Errors
This function will return an error in the following situations, but is not limited to just these cases:
from
is neither a regular file nor a symlink to a regular file.from
does not exist.- The current process does not have the permission rights to read
from
or writeto
.
Examples
use std::fs;
fn main() -> std::io::Result<()> {
fs::copy("foo.txt", "bar.txt")?; // Copy foo.txt to bar.txt
Ok(())
}
Run