A Rust library for more work functionality with file system.
-
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
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 |
Add this to your Cargo.toml
:
[dependencies]
fs_extra = "1.1.0"
and this to your crate root:
extern crate fs_extra;
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();
}