Struct std::fs::Permissions

1.0.0 · source ·
pub struct Permissions(_);
Expand description

表示文件上的各种权限。

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

Implementations§

source§

impl Permissions

source

pub fn readonly(&self) -> bool

如果这些权限描述了只读 (unwritable) 文件,则返回 true

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() 函数。

Examples
use std::fs::File;

fn main() -> std::io::Result<()> {
    let mut f = File::create("foo.txt")?;
    let metadata = f.metadata()?;

    assert_eq!(false, metadata.permissions().readonly());
    Ok(())
}
Run
source

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

修改此权限集的只读标志。如果 readonly 参数是 true,则使用生成的 Permission 将更新文件权限以禁止写入。

相反,如果是 false,则使用生成的 Permission 将更新文件权限以允许写入。

此操作修改文件属性。这只会更改此 Permissions 实例的这些属性的内存值。 要修改文件属性,请使用 set_permissions 函数,它将这些属性更改提交到文件。

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 来避免这个问题。

Examples
use std::fs::File;

fn main() -> std::io::Result<()> {
    let f = File::create("foo.txt")?;
    let metadata = f.metadata()?;
    let mut permissions = metadata.permissions();

    permissions.set_readonly(true);

    // 文件系统不会改变,只有只读权限的内存状态
    assert_eq!(false, metadata.permissions().readonly());

    // 只是这个特殊的 `permissions`。
    assert_eq!(true, permissions.readonly());
    Ok(())
}
Run

Trait Implementations§

source§

impl Clone for Permissions

source§

fn clone(&self) -> Permissions

返回值的副本。 Read more
source§

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

source 执行复制分配。 Read more
source§

impl Debug for Permissions

source§

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

使用给定的格式化程序格式化该值。 Read more
source§

impl PartialEq<Permissions> for Permissions

source§

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

此方法测试 selfother 值是否相等,并由 == 使用。
source§

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

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

impl PermissionsExt for Permissions

Available on Unix only.
source§

fn mode(&self) -> u32

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

fn set_mode(&mut self, mode: u32)

设置此权限集的底层原始位。 Read more
source§

fn from_mode(mode: u32) -> Permissions

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

impl Eq for Permissions

source§

impl StructuralEq for Permissions

source§

impl StructuralPartialEq for Permissions

Auto Trait Implementations§

Blanket Implementations§

source§

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

source§

fn type_id(&self) -> TypeId

获取 selfTypeIdRead more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

从拥有的值中一成不变地借用。 Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

从拥有的值中借用。 Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

返回未更改的参数。

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

调用 U::from(self)

也就是说,这种转换是 From<T> for U 实现选择执行的任何操作。

source§

impl<T> ToOwned for Twhere T: Clone,

§

type Owned = T

获得所有权后的结果类型。
source§

fn to_owned(&self) -> T

从借用的数据创建拥有的数据,通常是通过克隆。 Read more
source§

fn clone_into(&self, target: &mut T)

使用借来的数据来替换拥有的数据,通常是通过克隆。 Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

发生转换错误时返回的类型。
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

执行转换。
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

发生转换错误时返回的类型。
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

执行转换。