文件系统中常见的包
- DirBuilder:创建拥有丰富特性的目录的构建器。
- DirEntry:ReadDir迭代器返回的条目。
- File:访问文件系统上的文件的对象。
- FileType:代表访问文件类型的结构。它由Metadata::file_type方法返回。
- Metadata:文件的原始信息。
- OpenOptions:关于文件如何打开的选项和flags。
- Permissions:文件的权限。
- ReadDir:目录入口迭代器。
DirBuilder
实现方法:
new() -> DirBuilder
:创建一个默认构造参数的DirBuilder。recursive(&mut self, recursive: bool) -> &mut Self
:递归创建目录所有父目录,默认不开启。create<P: AsRef<Path>>(&self, path: P) -> Result<()>
:创建一个特定的目录。目录存在则报错,除非开启了递归模式。
实现的trait包括:Debug
:用于格式化输出对象。DirBuilderExt
:用于unix系统下设置权限。
自动实现trait:RefUnwindSafe
Send
Sync
Unpin
UnwindSafe
使用示例:
use std::fs;
fn main() {
let path = "/tmp/aa/bb/cc/dd";
let builder = fs::DirBuilder::new().recursive(true).create(&path).unwrap();
if fs::metadata(path).unwrap().is_dir() {
println!("成功创建目录:{}", path)
}
}
DirEntry
DirEntry 代表了文件系统上的一个入口,每个入口都可以使用对应的方法获取其相关信息。
常用方法:
path(&self) -> PathBuf
:返回入口代表的完整路径。metadata(&self) -> Result<Metadata>
:返回入口的原始信息。file_type(&self) -> Result<FileType>
:返回条目所在的文件类型。file_name(&self) -> OsString
:返回条目的文件名称。- ``
使用示例:
use std::fs;
fn main() -> std::io::Result<()> {
for entry in fs::read_dir("/tmp")? {
let dir = entry?;
if fs::metadata(dir.path()).unwrap().is_file() {
println!(
"当前文件:{:?} 文件类型:{:?} 文件名称:{:?} 权限 :{:?} ",
dir,
dir.file_type(),
dir.file_name(),
dir.metadata().unwrap().permissions()
);
} else {
println!("当前路径:{:?}", dir.path());
}
}
Ok(())
}
File
提供访问文件系统中的文件的对象。常见方法:
open<P: AsRef<Path>>(path: P) -> Result<File>
:尝试以只读方式打开文件。create<P: AsRef<Path>>(path: P) -> Result<File>
:以只写方式创建一个文件。sync_all(&self) -> Result<()>
:同步操作系统内部的所有metadata到磁盘。sync_data(&self) -> Result<()>
:和sync_all类似,只是也许不同步原始信息,可以减少磁盘io。set_len(&self, size: u64) -> Result<()>
:截断文件为size长度。metadata(&self) -> Result<Metadata>
:查询文件的meta信息。try_clone(&self) -> Result<File>
:创建一个新的和已知文件句柄共享的File示例。对handle的读、写、seek都将同时影响。set_permissions(&self, perm: Permissions) -> Result<()>
:改变文件的权限。
实现的常见trait
Debug
- fmt函数可以使用fmt格式化输出对象。
Read
read(&mut self, buf: &mut [u8]) -> Result<usize>
:从源文件读取数据到特定的buffer。read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize>
:读源文件直到遇到EOF为止,read_to_string(&mut self, buf: &mut String) -> Result<usize>
:读源文件的所有的字节,将他们加入buf。read_exact(&mut self, buf: &mut [u8]) -> Result<()>
:读特定数量的数据加入buf。by_ref(&mut self) -> &mut Self where Self: Sized
:为读实例创建引用适配器。bytes(self) -> Bytes<Self> where Self: Sized
:转换Read实例为字节迭代器。chars(self) -> Chars<Self> where Self: Sized,
:转换Read实例为char迭代器。chain<R: Read>(self, next: R) -> Chain<Self, R> where Self: Sized,
:当前流和另一个流创建一个链条连接。take(self, limit: u64) -> Take<Self> where Self: Sized
:创建一个从源读取至少limit字节的数据。
Write
write(&mut self, buf: &[u8]) -> Result<usize>
:写buffer到对象中返回写入了多少数据。flush(&mut self) -> Result<()>
:刷新输出流,确保所有的数据都写入目的地。write_all(&mut self, buf: &[u8]) -> Result<()>
:尝试写所有的buf到输出writer。write_fmt(&mut self, fmt: Arguments) -> Result<()>
:按照特定的方式写入writer。by_ref(&mut self) -> &mut Self where Self: Sized
:为Write创建引用实例。
Seek
seek(&mut self, pos: SeekFrom) -> Result<u64>
:在流中以字节为单位跳转pos位置。
FromFd
from_raw_fd(fd: RawFd) -> File
:从原始的文件描述符创建一个File实例(unix)。
IntoRawFd
into_raw_fd(self) -> RawFd
:消耗一个对象返回文件描述符。
FileExt
read_at(&self, buf: &mut [u8], offset: u64) -> Result<usize>
:从给定的流的offset读取一定的字节到buf。write_at(&self, buf: &[u8], offset: u64) -> Result<usize>
:往给定流的offset读写入一定字节。
AsRawHanfle
as_raw_handle(&self) -> RawHandle
:地区原始的hanfle没有任何所有权。
FileType
代表每个文件类型的结构体。常见方法:
is_dir(&self) -> bool
:是否文件类型为目录。is_file(&self) -> bool
:是否文件类型为文件。is_symlink(&self) -> bool
:是否文件类型为链接。
Metadata
文件的原始信息,常见方法:
file_type(&self) -> FileType
:返回metadata的文件类型。is_dir(&self) -> bool
:是否metadata为目录。is_file(&self) -> bool
:是否metadata为文件。len(&self) -> u64
:文件的长度,字节为单位。permissions(&self) -> Permissions
:文件metadata的权限。modified(&self) -> Result<SystemTime>
:文件metadata的最后修改时间。accessed(&self) -> Result<SystemTime>
:返回metadata的最后访问时间。created(&self) -> Result<SystemTime>
:返回metadata的创建时间。
实现常见的trait
MetadataExt
常见方法:
st_dev(&self) -> u64
:返回文件的设备ID(linux)。st_ino(&self) -> u64
:返回文件的innode(linux)。st_mode(&self) -> u32
:返回文件的类型和模式(linux)st_nlink(&self) -> u64
:返回文件的硬连接数。st_uid(&self) -> u32
:返回文件拥有者的用户ID。st_gid(&self) -> u32
:返回文件的组id。st_rdev(&self) -> u64
:返回文件代表的设备ID。仅仅用于特殊文件。st_size(&self) -> u64
:返回文件(符号链接或者正常文件)的大小(字节单位)。st_atime(&self) -> i64
:返回文件的最后访问时间。st_atime_nsec(&self) -> i64
:返回文件的最后访问时间(纳秒单位)。st_mtime(&self) -> i64
:返回文件的最后修改时间。st_mtime_nsec(&self) -> i64
:返回文件的最后修改时间,纳米单位。st_ctime(&self) -> i64
:返回文件最后状态改变的时间。st_ctime_nsec(&self) -> i64
:返回文件最后状态改变时间,纳秒单位。st_blksize(&self) -> u64
:返回搞笑文件系统IO的blocksize。st_blocks(&self) -> u64
:返回分配文件的block数,512字节为单位。
仅仅支持unix
dev(&self) -> u64
:返回包含文件的设备ID。ino(&self) -> u64
:返回inode。mode
:返回应用到文件的权限。nlink(&self) -> u64
:返回指向文件的硬链接数。uid(&self) -> u32
:返回文件的uid。gid(&self) -> u32
:返回文件的gid。rdev(&self) -> u64
:返回文件的设备ID。size(&self) -> u64
:返回文件的大小,字节为单位。atime(&self) -> i64
:返回文件的最后访问时间。atime_nsec(&self) -> i64
:返回文件的最后访问时间,纳秒单位。mtime(&self) -> i64
:返回文件的最后修改时间。mtime_nsec(&self) -> i64
:返回文件的最后修改时间,纳秒单位。ctime(&self) -> i64
:返回文件最后状态修改的时间。ctime_nsec(&self) -> i64
:返回文件最后状态修改的时间,纳秒单位。blksize(&self) -> u64
:文件的块大小。blocks(&self) -> u64
:返回文件分配的块数,512字节为单位。
OpenOptions
关于文件如何打开的选项和flags。
new() -> OpenOptions
:创建一个空的打开选项。read(&mut self, read: bool) -> &mut OpenOptions
:设置打开选项为读。write(&mut self, write: bool) -> &mut OpenOptions
:设置打开选项为写。append(&mut self, append: bool) -> &mut OpenOptions
:设置打开选项为添加。truncate(&mut self, truncate: bool) -> &mut OpenOptions
:设置打开选项为截断。如果文件存在且截断打开文件将被截断为0。create(&mut self, create: bool) -> &mut OpenOptions
:为新文件创建打开选项。为了创建新文件,write或者append必须打开。create_new(&mut self, create_new: bool) -> &mut OpenOptions
:设置打开选项为总是创建一个新文件,文件不应该存在。如果设置这个选项则cteate和truncate将被忽略。open<P: AsRef<Path>>(&self, path: P) -> Result<File>
:打开文件选项。
Permissions
代表文件的权限。
readonly(&self) -> bool
:返回描述权限是否为只读。set_readonly(&mut self, readonly: bool)
:修改文件的权限为只读。
ReadDir
目录条目的迭代器。