Struct std::fs::Permission
表示文件上的各种权限。
该模块当前仅提供一点信息 Permissions::readonly,该信息在所有当前支持的平台上公开。 特定于 Unix 的功能 (例如模式位) 可通过 PermissionsExt trait 获得。
1.Implementations
impl Permissions
readonly
判断文件是否是只读的
pub fn readonly(&self) -> bool返回值:根据文件是否只读,返回 bool值
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
把文件设置为只读
pub fn set_readonly(&mut self, readonly: bool)参数:
- readonly:设置是否只读
注意:set_readonly只是把Permissions对象的readonly设置为了只读,并没用应用于文件上,想要应用在文件上,需要使用 fs::set_permissions
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
返回值的副本。
fn clone(&self) -> Permissionsclone_from
把另一个对象上的属性克隆到自己身上
fn clone_from(&mut self, source: &Self)impl Debug for Permissions
fmt
使用给定的格式化程序格式化该值。
fn fmt(&self, f: &mut Formatter<'_>) -> Resultimpl PartialEq<Permissions> for Permissions
eq
此方法测试 self 和 other 值是否相等,并由 == 使用。
fn eq(&self, other: &Permissions) -> boolne
此方法测试 !=。 默认实现几乎总是足够的,并且不应在没有充分理由的情况下被覆盖。
fn ne(&self, other: &Rhs) -> boolimpl PermissionsExt for Permissions
TIP
仅在Unix上可用
mode
返回包含该文件的标准 Unix 权限的底层原始 st_mode 位。
fn mode(&self) -> u32set_mode
设置此权限集的底层原始位。
fn set_mode(&mut self, mode: u32)from_mode
从给定的 Unix 权限位集中创建 Permissions 的新实例。
fn from_mode(mode: u32) -> Permissionsimpl 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
impl<T> Any for T
where
T: 'static + ?Sized,impl<T> Borrow<T> for T
impl<T> Borrow<T> for T
where
T: ?Sized,impl<T> BorrowMut<T> for T
impl<T> BorrowMut<T> for T
where
T: ?Sized,impl<T> From<T> for T
impl<T> From<T> for Timpl<T, U> Into<U> for T
impl<T, U> Into<U> for T
where
U: From<T>,impl<T> ToOwned for T
impl<T> ToOwned for T
where
T: Clone,impl<T, U> TryFrom<U> for T
impl<T, U> TryFrom<U> for T
where
U: Into<T>,impl<T, U> TryInto<U> for T
impl<T, U> TryInto<U> for T
where
U: TryFrom<T>,