rust学习之dir和path操作
前言
对Linux文件系统来说,dir也是一个文件,只是他没有内容,有的是inode信息。指引到其他文件。下面是dir和path的操作图:
dir操作都在std::fs包下,path操作在std::path下面。
读取dir操作
这部分源码也比较底层,不看了。
例子:
use std::fs;
use std::path::Path;
fn main() {
let dir = fs::read_dir(".").unwrap();
for entry in dir {
let entry = entry.unwrap();
let path = entry.path();
let file_type = entry.file_type().unwrap();
let metadata = entry.metadata().unwrap();
let file_name = entry.file_name();
println!("{:?} {:?} {:?} {:?} ", path, file_type, metadata, file_name);
}
let new_path = Path::new("/usr/path.txt");
println!("{:?}", new_path);
for component in new_path.components() {
println!("comp {:?}", component);
}
}
例子主要是获取当前目录下所有文件和文件的信息。第二部分是用构建一个新的path,然后打印他们的各个路径。
构建dir
如何用程序构建一个目录呢?rust提供了Dirbuilder struct。
例子:
use std::fs;
use std::path::Path;
use std::fs::DirBuilder;
fn main() {
let dir = "/tmp/dir1/dir2/dir3/";
println!("{:?}", DirBuilder::new().recursive(true).create(dir).unwrap());
}
构建path
例子:
use std::fs;
use std::path::{Path, PathBuf};
use std::fs::{DirBuilder, File};
fn main() {
let mut path_buf = PathBuf::new();
path_buf.push("/tmp");
path_buf.push("test");
path_buf.push("path1");
path_buf.push("esa");
path_buf.set_extension("rs");
println!("{:?}", path_buf);
println!("{:?}", File::create(path_buf).unwrap());
}
我们可以构建一个path,然后通过这个path来创建文件或者目录。