Skip to content

Struct std::fs::Permission

表示文件上的各种权限。

该模块当前仅提供一点信息 Permissions::readonly,该信息在所有当前支持的平台上公开。 特定于 Unix 的功能 (例如模式位) 可通过 PermissionsExt trait 获得。

1.Implementations

impl Permissions

readonly

判断文件是否是只读的

rust
pub fn readonly(&self) -> bool

返回值:根据文件是否只读,返回 bool值

rust
use std::fs::{self};

fn main() {
    let file = fs::metadata("test.txt").unwrap();

    let p = file.permissions();

    println!("{:#?}", p.readonly())  // false
}

TIP

Note

此函数不考虑访问控制列表 (ACLs) 或 Unix 组成员身份。

Windows

在 Windows 上,这将返回 FILE_ATTRIBUTE_READONLY

如果设置了 FILE_ATTRIBUTE_READONLY,则写入文件将失败,但用户可能仍有更改此标志的权限。 如果 FILE_ATTRIBUTE_READONLY not 设置,则由于缺少写入权限,写入仍可能失败。 目录的此属性的行为取决于 Windows 版本。

Unix (包括 macOS)

在基于 Unix 的平台上,这会检查是否设置了所有者、组或其他人的写权限位的 any。 它不检查当前用户是否在文件的指定组中。 它也不检查 ACL。 因此,即使返回 true,您也可能无法写入文件,反之亦然。 PermissionsExt trait 提供对权限位的直接访问,但也不读取 ACL。 如果您需要准确地知道文件是否可写,请使用 libc 中的 access() 函数。

set_readonly

把文件设置为只读

rust
pub fn set_readonly(&mut self, readonly: bool)

参数

  • readonly:设置是否只读

注意:set_readonly只是把Permissions对象的readonly设置为了只读,并没用应用于文件上,想要应用在文件上,需要使用 fs::set_permissions

rust
use std::fs::{self};

fn main() {
    let file = fs::metadata("test.txt").unwrap();

    let mut p = file.permissions();
    p.set_readonly(true);

    let res = fs::set_permissions("test.txt", p); // ← 关键
    println!("{:#?}", res)
}

TIP

Note

set_readonly(false) 使 Unix 上的文件 world-writable。 您可以在 Unix 上使用 PermissionsExt trait 来避免这个问题。

它也不考虑访问控制列表 (ACLs) 或 Unix 组成员身份。

Windows

在 Windows 上,这设置或清除 FILE_ATTRIBUTE_READONLY。 如果设置了 FILE_ATTRIBUTE_READONLY,则写入文件将失败,但用户可能仍有更改此标志的权限。 如果 FILE_ATTRIBUTE_READONLY not 设置,那么如果用户没有写入文件的权限,写入可能仍然失败。

在 Windows 7 及更早版本中,此属性可防止删除空目录。它不会阻止修改目录内容。 在更高版本的 Windows 中,此属性对于目录将被忽略。

Unix (包括 macOS)

在基于 Unix 的平台上,这会设置或清除所有者、组其他人的写访问位,分别相当于 chmod a+w <file>chmod a-w <file>。 后者将授予所有用户写入权限! 您可以在 Unix 上使用 PermissionsExt trait 来避免这个问题。

2.Trait Implementations

impl Clone for Permissions

clone

返回值的副本。

rust
fn clone(&self) -> Permissions

clone_from

把另一个对象上的属性克隆到自己身上

rust
fn clone_from(&mut self, source: &Self)

impl Debug for Permissions

fmt

使用给定的格式化程序格式化该值。

rust
fn fmt(&self, f: &mut Formatter<'_>) -> Result

impl PartialEq<Permissions> for Permissions

eq

此方法测试 self 和 other 值是否相等,并由 == 使用。

rust
fn eq(&self, other: &Permissions) -> bool

ne

此方法测试 !=。 默认实现几乎总是足够的,并且不应在没有充分理由的情况下被覆盖。

rust
fn ne(&self, other: &Rhs) -> bool

impl PermissionsExt for Permissions

TIP

仅在Unix上可用

mode

返回包含该文件的标准 Unix 权限的底层原始 st_mode 位。

rust
 fn mode(&self) -> u32

set_mode

设置此权限集的底层原始位。

rust
fn set_mode(&mut self, mode: u32)

from_mode

从给定的 Unix 权限位集中创建 Permissions 的新实例。

rust
 fn from_mode(mode: u32) -> Permissions

impl Eq for Permissions

impl StructuralEq for Permissions

impl StructuralPartialEq for Permissions

3.Auto Trait Implementations

impl RefUnwindSafe for Permissions

impl Send for Permissions

impl Sync for Permissions

impl Unpin for Permissions

impl UnwindSafe for Permissions

4.Blanket Implementations

impl<T> Any for T

rust
impl<T> Any for T
where
  T: 'static + ?Sized,

impl<T> Borrow<T> for T

rust
impl<T> Borrow<T> for T
where
  T: ?Sized,

impl<T> BorrowMut<T> for T

rust
impl<T> BorrowMut<T> for T
where
  T: ?Sized,

impl<T> From<T> for T

rust
impl<T> From<T> for T

impl<T, U> Into<U> for T

rust
impl<T, U> Into<U> for T
where
  U: From<T>,

impl<T> ToOwned for T

rust
impl<T> ToOwned for T
where
  T: Clone,

impl<T, U> TryFrom<U> for T

rust
impl<T, U> TryFrom<U> for T
where
  U: Into<T>,

impl<T, U> TryInto<U> for T

rust
impl<T, U> TryInto<U> for T
where
  U: TryFrom<T>,

MIT Licensed