Rust基础(文件系统fs)

文件系统中常见的包

  • 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

目录条目的迭代器。


   转载规则


《Rust基础(文件系统fs)》 bleedingfight 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录