summaryrefslogtreecommitdiffstats
path: root/tokio/src/fs
diff options
context:
space:
mode:
authorDominic <email@domi-me.de>2020-01-24 20:43:26 +0100
committerCarl Lerche <me@carllerche.com>2020-01-24 11:43:26 -0800
commitf0bfebb7e1b1b7e86857781a6d730679b9761daf (patch)
tree061d28366132baacf38d8ef84041b2938d82efcc /tokio/src/fs
parent968c143acdde1905219880ba662cecb58c4aa82d (diff)
fs: add fs::copy (#2079)
Provides an asynchronous version of `std::fs::copy`. Closes: #2076
Diffstat (limited to 'tokio/src/fs')
-rw-r--r--tokio/src/fs/copy.rs26
-rw-r--r--tokio/src/fs/mod.rs3
2 files changed, 29 insertions, 0 deletions
diff --git a/tokio/src/fs/copy.rs b/tokio/src/fs/copy.rs
new file mode 100644
index 00000000..e39924c5
--- /dev/null
+++ b/tokio/src/fs/copy.rs
@@ -0,0 +1,26 @@
+use crate::fs::File;
+use crate::io;
+use std::path::Path;
+
+/// 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.
+///
+/// This is the async equivalent of `std::fs::copy`.
+///
+/// # Examples
+///
+/// ```no_run
+/// use tokio::fs;
+///
+/// # async fn dox() -> std::io::Result<()> {
+/// fs::copy("foo.txt", "bar.txt").await?;
+/// # Ok(())
+/// # }
+/// ```
+
+pub async fn copy<P: AsRef<Path>, Q: AsRef<Path>>(from: P, to: Q) -> Result<u64, std::io::Error> {
+ let from = File::open(from).await?;
+ let to = File::create(to).await?;
+ let (mut from, mut to) = (io::BufReader::new(from), io::BufWriter::new(to));
+ io::copy(&mut from, &mut to).await
+}
diff --git a/tokio/src/fs/mod.rs b/tokio/src/fs/mod.rs
index 266364b9..3eb03764 100644
--- a/tokio/src/fs/mod.rs
+++ b/tokio/src/fs/mod.rs
@@ -80,6 +80,9 @@ pub use self::symlink_metadata::symlink_metadata;
mod write;
pub use self::write::write;
+mod copy;
+pub use self::copy::copy;
+
use std::io;
pub(crate) async fn asyncify<F, T>(f: F) -> io::Result<T>