9 个版本 (4 个稳定版)
1.3.0 | 2023年2月3日 |
---|---|
1.2.0 | 2020年8月25日 |
1.1.0 | 2018年1月4日 |
1.0.0 | 2017年3月8日 |
0.1.0 | 2017年2月8日 |
#5 in 文件系统
1,686,849 每月下载量
在 1,161 个 Crates 中使用 (513 个直接使用)
100KB
1.5K SLoC
fs_extra
A Rust library that provides additional functionality not present in std::fs
.
关键特性
-
复制文件(可选地包含进度信息)。
-
递归复制目录(可选地包含进度信息)。
-
移动文件(可选地包含进度信息)。
-
递归移动目录(可选地包含进度信息)。
-
单个方法用于在文件中创建和写入
String
内容。 -
单个方法用于从文件中打开和读取
String
内容。 -
获取文件夹大小
-
获取目录条目集合
函数
用法
将其添加到您的 Cargo.toml
[dependencies]
fs_extra = "1.3.0"
示例
以下示例展示了如何递归地复制目录并显示进度。首先创建一个包含文件 ./temp/dir
(其中包含文件 test1.txt
和子目录 sub
,而 sub
本身也包含一个文件 test2.txt
)的源目录。然后将 ./temp/dir
及其所有内容复制到 ./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();
}