如何在rust中检查一个目录是否有写权限?

8xiog9wr  于 2022-11-12  发布在  其他
关注(0)|答案(1)|浏览(269)

我想知道是否有一种方法可以检查rust应用程序是否有权限在文件夹内写入?
我看到有一种方法可以通过阅读原始位权限来检查它,但这并不考虑用户或组。另一种方法可以是编写一个文件,看看它是否失败,但这听起来并不很优雅。
到目前为止我已经尝试过这个,但它似乎只适用于文件(?)

use std::fs::File;

fn main() {
    let loc = "/var/log/myfolder";

    // Check if able to write inside directory
    let res = File::options()
              .read(false)
              .write(true)
              .open(loc);

    if res.is_ok() {
        println!("No read permission");
    } else {
        println!("Read permission");
    }
}

有没有更简单的方法可以检查文件夹是否具有写入权限,而无需尝试在其中创建文件?

cpjpxq1n

cpjpxq1n1#

您可以使用fs::metadata

use std::fs;

fn main() -> std::io::Result<()> {
    let loc = "/etc/";

    // Check if able to write inside directory
    let md = fs::metadata(loc)?;
    let permissions = md.permissions();
    let readonly = permissions.readonly();
    if readonly {
        println!("No write permission");
    } else {
        println!("Write permission");
    }
    Ok(())
}

在类Unix系统上,您可以使用PermissionsExt trait获得更具体的信息:

use std::fs;
// make sure to import the trait
use std::os::unix::fs::PermissionsExt;

fn main() -> std::io::Result<()> {
    let loc = "/etc/";

    // Check if able to write inside directory
    let md = fs::metadata(loc)?;
    let permissions = md.permissions();
    let mode = permissions.mode();
    println!("{:o}", mode); // 40755
    Ok(())
}

相关问题