#directory #fs-file #file-copy #file #copy #directory-recursive

fs_extra

扩展 std::fs 和 std::io。递归复制文件夹,包括进程信息等。

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 文件系统

Download history 299115/week @ 2024-04-27 303285/week @ 2024-05-04 333754/week @ 2024-05-11 325196/week @ 2024-05-18 339539/week @ 2024-05-25 372560/week @ 2024-06-01 363909/week @ 2024-06-08 345450/week @ 2024-06-15 340206/week @ 2024-06-22 351199/week @ 2024-06-29 386360/week @ 2024-07-06 387566/week @ 2024-07-13 420998/week @ 2024-07-20 418994/week @ 2024-07-27 410098/week @ 2024-08-03 367341/week @ 2024-08-10

1,686,849 每月下载量
1,161 个 Crates 中使用 (513 个直接使用)

MIT 许可证

100KB
1.5K SLoC

fs_extra

A Rust library that provides additional functionality not present in std::fs.

Build Status Crates.io Status Docs

文档

迁移到 1.x.x 版本

关键特性

  • 复制文件(可选地包含进度信息)。

  • 递归复制目录(可选地包含进度信息)。

  • 移动文件(可选地包含进度信息)。

  • 递归移动目录(可选地包含进度信息)。

  • 单个方法用于在文件中创建和写入 String 内容。

  • 单个方法用于从文件中打开和读取 String 内容。

  • 获取文件夹大小

  • 获取目录条目集合

函数

函数 描述
fs_extra::copy_items 递归地从一个位置复制文件和目录到另一个位置
fs_extra::copy_items_with_progress 递归地从一个位置复制文件和目录到另一个位置,并包含进度信息
fs_extra::move_items 递归地从一个位置移动文件和目录到另一个位置
fs_extra::move_items_with_progress 递归地从一个位置移动文件和目录到另一个位置,并包含进度信息
fs_extra::remove_items 删除文件或目录
fs_extra::file::copy 将一个文件的内容复制到另一个文件
fs_extra::file::copy_with_progress 将一个文件的内容复制到另一个文件,并包含进度信息
fs_extra::file::move_file 将一个文件从一个位置移动到另一个位置
fs_extra::file::move_file_with_progress 将一个文件从一个位置移动到另一个位置,并包含进度信息
fs_extra::file::remove 删除一个文件
fs_extra::file::read_to_string 将文件内容读取到 String
fs_extra::file::write_all String 内容写入文件
fs_extra::dir::create 在给定的路径创建一个新空目录
fs_extra::dir::create_all 递归地创建目录及其所有父组件(如果它们缺失)
fs_extra::dir::copy 递归地从一个位置复制目录内容到另一个位置
fs_extra::dir::copy_with_progress 递归地将目录内容从一处复制到另一处,并显示进度信息
fs_extra::dir::move_dir 将目录内容从一个位置移动到另一个位置
fs_extra::dir::move_dir_with_progress 将目录内容从一个位置移动到另一个位置,并显示进度信息
fs_extra::dir::remove 删除目录
fs_extra::dir::get_size 返回文件或目录的大小
fs_extra::dir::get_dir_content 获取目录的详细信息,如大小和子项
fs_extra::dir::get_dir_content2 使用指定设置获取目录的详细信息,如大小和子项
fs_extra::dir::get_details_entry 获取目录条目的属性
fs_extra::dir::ls 获取目录中目录条目的属性

用法

将其添加到您的 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();
}

无运行时依赖