Crates.io | fs_extra |
lib.rs | fs_extra |
version | 1.3.0 |
source | src |
created_at | 2017-02-08 09:23:29.605076 |
updated_at | 2023-02-03 17:59:27.093041 |
description | Expanding std::fs and std::io. Recursively copy folders with information about process and much more. |
homepage | https://github.com/webdesus/fs_extra |
repository | https://github.com/webdesus/fs_extra |
max_upload_size | |
id | 8431 |
size | 436,263 |
A Rust library that provides additional functionality not present in std::fs
.
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).
A single method for create and write String
content in file.
A single method for open and read String
content from file.
Get folder size
Get collection of directory entries
Function | Description |
---|---|
fs_extra::copy_items | Recursively copies files and directories from one location to another |
fs_extra::copy_items_with_progress | Recursively copies files and directories from one location to another with information about progress |
fs_extra::move_items | Recursively moves files and directories from one location to another |
fs_extra::move_items_with_progress | Recursively moves files and directories from one location to another with information about progress |
fs_extra::remove_items | Removes 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 information about progress |
fs_extra::file::move_file | Moves a file from one location to another |
fs_extra::file::move_file_with_progress | Moves a file from one location to another with information about progress |
fs_extra::file::remove | Removes a file |
fs_extra::file::read_to_string | Reads file content into a String |
fs_extra::file::write_all | Writes String content to a file |
fs_extra::dir::create | Creates a new, empty directory at the given path |
fs_extra::dir::create_all | Recursively creates a directory and all of its parent components if they are missing |
fs_extra::dir::copy | Recursively copies the directory contents from one location to another |
fs_extra::dir::copy_with_progress | Recursively copies the directory contents from one location to another with information about progress |
fs_extra::dir::move_dir | Moves directory contents from one location to another |
fs_extra::dir::move_dir_with_progress | Moves directory contents from one location to another with information about progress |
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 | Gets details such as the size and child items of a directory |
fs_extra::dir::get_dir_content2 | Gets details such as the size and child items of a directory using specified settings |
fs_extra::dir::get_details_entry | Gets attributes of a directory entry |
fs_extra::dir::ls | Gets attributes of directory entries in a directory |
Add this to your Cargo.toml
:
[dependencies]
fs_extra = "1.3.0"
The following example shows how to copy a directory recursively and display progress. First a source directory ./temp/dir
containing file test1.txt
and a subdirectory sub
is createad with sub
itself having a file test2.txt
. ./temp/dir
and all contents are then copied out 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();
}