Expanding opportunities standard library std::fs and std::io
Switch branches/tags
Clone or download
Permalink
Failed to load latest commit information.
src format rust code Jan 7, 2018
tests format rust code Jan 7, 2018
.gitignore Add mirror copy feature Sep 6, 2017
.travis.yml * release #3 Feb 9, 2017
Cargo.toml version 1.1.0 Jan 4, 2018
LICENSE Initial commit Feb 7, 2017
README.md Update README.md Jan 4, 2018

README.md

fs_extra

A Rust library for more work functionality with file system.

Build Status Crates.io Status Docs

Documentation

Migrations to 1.x.x version

Key features:

  • Copy files (optionally with information about the progress).

  • Copy directories recursively (optionally with information about the progress).

  • Move files (optionally with information about the progress).

  • Move directories recursively (optionally with information about the progress).

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

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

  • Get size folder

  • Get collection directory entries

Functions:

Function Description
fs_extra::copy_items Copies list directories and files to another place using recursive method
fs_extra::copy_items_with_progress Copies list directories and files to another place using recursive method, with recept information about process
fs_extra::move_items Moves list directories and files to another place using recursive method
fs_extra::move_items_with_progress Moves list directories and files to another place using recursive method, with recept information about process
fs_extra::remove_items Removes list files or directories
fs_extra::file::copy Copies the contents of one file to another
fs_extra::file::copy_with_progress Copies the contents of one file to another with recept information about process
fs_extra::file::move_file Moves file from one place to another
fs_extra::file::move_file_with_progress Moves file from one place to another with recept information about process
fs_extra::file::remove Removes a file from the filesystem
fs_extra::file::read_to_string Read file content, placing him into String
fs_extra::file::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
fs_extra::dir::get_size Returns the size of the file or directory
fs_extra::dir::get_dir_content Return DirContent which containt information about directory
fs_extra::dir::get_dir_content2 Return DirContent which containt information about directory using DirOptions like settings
fs_extra::dir::get_details_entry Returned information about directory entry with information which you choose in config
fs_extra::dir::ls Returned collection directory entries with information which you choose in config

Usage

Add this to your Cargo.toml:

[dependencies]
fs_extra = "1.1.0"

and this to your crate root:

extern crate fs_extra;

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));
            fs_extra::dir::TransitProcessResult::ContinueOrAbort
        };
        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();
}