# Function std::fs::copy

1.0.0 · source ·

    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 want 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 write `to`.

## Examples

    use std::fs;

    fn main() -> std::io::Result<()> {
        fs::copy("foo.txt", "bar.txt")?;  // Copy foo.txt to bar.txt
        Ok(())
    }

Run