Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::fs::File;
- use std::io::prelude::*;
- use std::io::ErrorKind;
- use std::io::Result;
- use std::time::Instant;
- fn main() {
- let now = Instant::now();
- copy_n_bytes(
- "/path/to/20_megbayte/file",
- "path/to/target/file",
- std::usize::MAX,
- 1 << 5,
- )
- .unwrap();
- println!("Time elapsed: {}ms", now.elapsed().as_millis());
- }
- fn copy_n_bytes(source: &str, dest: &str, n: usize, cache: usize) -> Result<()> {
- let mut src = File::open(source)?;
- let mut dst = File::create(dest)?;
- let mut buf = vec![0; cache];
- let mut bytes_read: usize = 0;
- let mut k;
- while bytes_read < n {
- match src.read(&mut buf) {
- Ok(n) => {
- k = n;
- }
- Err(e) => match e.kind() {
- ErrorKind::Interrupted => {
- continue;
- }
- _ => {
- eprintln!("Error {:?}", e);
- return Err(e);
- }
- },
- }
- if k == 0 {
- println!("EOF reached");
- break;
- }
- dst.write_all(&buf[..k])?;
- bytes_read += k;
- }
- Ok(())
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement