gpt4 book ai didi

rust - 如何在 Rust 中删除目录中的所有文件而不是目录本身?

转载 作者:行者123 更新时间:2023-12-03 11:27:41 33 4
gpt4 key购买 nike

如何在不删除目录本身的情况下删除目录中的所有文件?
我认为这会起作用,但它给出了一个错误:

for entry in std::fs::read_dir("tmp/my_items") {
std::fs::remove_file(entry);
}
the trait `AsRef<std::path::Path>` is not implemented for `ReadDir`

最佳答案

如果该目录没有被使用、监视或任何其他阻止它被删除的东西。然后你可以使用 fs::remove_dir_all() 删除整个目录并在使用后立即创建 fs::create_dir() , IE。:

use std::fs;

let path = "tmp/my_items";
fs::remove_dir_all(path).unwrap();
fs::create_dir(path).unwrap();

不然你好像搞糊涂了 fs::read_dir() 实际上返回。
它返回一个 Result<ReadDir> ,需要解包。然而,虽然 ReadDir 确实实现 Iterator ,它实际上并不产生路径。它实际上产生 Result<DirEntry> ,这也需要解包,但仍然不是路径。要获得实际路径,您必须调用 path() .
use std::fs;
use std::io;
use std::path::Path;

fn remove_dir_contents<P: AsRef<Path>>(path: P) -> io::Result<()> {
for entry in fs::read_dir(path)? {
fs::remove_file(entry?.path())?;
}
Ok(())
}

fn main() {
remove_dir_contents("tmp/my_items").unwrap();
}
如果目录只严格包含文件,那么您需要检查文件类型并删除目录及其内容。
use std::fs;
use std::io;
use std::path::Path;

fn remove_dir_contents<P: AsRef<Path>>(path: P) -> io::Result<()> {
for entry in fs::read_dir(path)? {
let entry = entry?;
let path = entry.path();

if entry.file_type()?.is_dir() {
remove_dir_contents(&path)?;
fs::remove_dir(path)?;
} else {
fs::remove_file(path)?;
}
}
Ok(())
}

关于rust - 如何在 Rust 中删除目录中的所有文件而不是目录本身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65573245/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com