如何在Rust中检查文件是否有指定权限模式?代码断言失败求助
问题分析与解决
嗨,这个问题我之前也踩过坑!核心原因是你误解了Unix系统里文件mode值的构成——它不只是我们设置的权限位,还包含了文件类型的标识位。
为什么断言会失败?
你代码里定义的MODE是0o700(十进制448),但f.metadata().unwrap().permissions().mode()返回的是完整的文件mode值,这个值由两部分组成:
- 文件类型位:比如普通文件对应的是
0o100000(十进制32768) - 权限位:就是你设置的
0o700
你看到的错误里左边的33216转换成八进制就是0o100700,正好是0o100000 + 0o700。直接拿完整mode和单纯的权限位比较,肯定会不相等。
怎么修复?
我们只需要把获取到的mode值和权限掩码做按位与操作,过滤掉文件类型位,只保留权限部分就行。修改断言代码:
assert_eq!(f_mode & 0o0777, MODE);
这里0o0777是权限掩码,它会保留mode值里最后9位(用户、组、其他的权限位),过滤掉前面的文件类型位。这样0o100700 & 0o0777就等于0o700,和你的MODE一致,断言就能通过了。
额外验证
你可以运行ls -al myfile看看,输出里的权限部分应该是-rwx------,这完全符合你设置的0o700权限——说明你的权限设置其实是成功的,只是断言的比较方式错了而已。
内容的提问来源于stack exchange,提问作者Edd Barrett
相关产品推荐
相关产品推荐

