fs_extra 0.2.0

Expanding opportunities standard library std::fs and std::io. Recursively copy folders with recept information about process and much more.
Documentation

fs_extra

A Rust library for more work functionality with file system.

Build Status Crates.io Status Docs

Documentation

Key features:

  • Copy files with recept information about process.

  • Copy directory recursively and recept information about process.

  • Move files with recept information about process.

  • Move directories recursively and recept information about process.

  • One method for create and write String content in file.

  • One method for open and read String content from file.

Functions:

Function Description
fs_extra::fs::copy Copies the contents of one file to another
fs_extra::fs::copy_with_progress Copies the contents of one file to another with recept information about process
fs_extra::fs::move_file Moves file from one place to another
fs_extra::fs::move_file_with_progress Moves file from one place to another with recept information about process
fs_extra::fs::remove Removes a file from the filesystem
fs_extra::fs::read_to_string Read file content, placing him into String
fs_extra::fs::write_all Write String content into inside target file
fs_extra::dir::create Creates a new, empty directory at the provided path
fs_extra::dir::create_all Recursively create a directory and all of its parent components if they are missing
fs_extra::dir::copy Copies the directory contents from one place to another using recursive method
fs_extra::dir::copy_with_progress Copies the directory contents from one place to another using recursive method, with recept information about process]()
fs_extra::dir::move_dir Moves the directory contents from one place to another
fs_extra::dir::move_dir_with_progress Moves the directory contents from one place to another with recept information about process
fs_extra::dir::remove Removes directory

Examples

The following example shows how to copy a directory recursively and to follow the process. This example created a directory dir contains test1.txt file and sub directory sub. Folder sub inside contains test2.txt file. Then copy ./temp/dir and all containts to ./out/dir

use std::path::Path;
use std::{thread, time};
use std::sync::mpsc::{self, TryRecvError};

extern crate fs_extra;
use fs_extra::dir::*;
use fs_extra::error::*;

fn example_copy() -> Result<()> {

    let path_from = Path::new("./temp");
    let path_to = path_from.join("out");
    let test_folder = path_from.join("test_folder");
    let dir = test_folder.join("dir");
    let sub = dir.join("sub");
    let file1 = dir.join("file1.txt");
    let file2 = sub.join("file2.txt");

    create_all(&sub, true)?;
    create_all(&path_to, true)?;
    fs_extra::file::write_all(&file1, "content1")?;
    fs_extra::file::write_all(&file2, "content2")?;

    assert!(dir.exists());
    assert!(sub.exists());
    assert!(file1.exists());
    assert!(file2.exists());


    let mut options = CopyOptions::new();
    options.buffer_size = 1;
    let (tx, rx) = mpsc::channel();
    thread::spawn(move || {
        let handler = |process_info: TransitProcess| {
            tx.send(process_info).unwrap();
            thread::sleep(time::Duration::from_millis(500));
        };
        copy_with_progress(&test_folder, &path_to, &options, handler).unwrap();
    });

    loop {
        match rx.try_recv() {
            Ok(process_info) => {
                println!("{} of {} bytes",
                         process_info.copied_bytes,
                         process_info.total_bytes);
            }
            Err(TryRecvError::Disconnected) => {
                println!("finished");
                break;
            }
            Err(TryRecvError::Empty) => {}
        }
    }
    Ok(())

}
fn main() {
    example_copy();