Struct std::fs::Permissions
1.0.0 · source · pub struct Permissions(_);
Expand description
表示文件上的各种权限。
该模块当前仅提供一点信息 Permissions::readonly
,该信息在所有当前支持的平台上公开。
特定于 Unix 的功能 (例如模式位) 可通过 PermissionsExt
trait 获得。
Implementations§
source§impl Permissions
impl Permissions
sourcepub fn readonly(&self) -> bool
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(())
}
Runsourcepub fn set_readonly(&mut self, readonly: bool)
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(())
}
RunTrait Implementations§
source§impl Clone for Permissions
impl Clone for Permissions
source§fn clone(&self) -> Permissions
fn clone(&self) -> Permissions
source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
执行复制分配。 Read more