【发布时间】:2015-07-18 14:25:59
【问题描述】:
一位朋友问我这个问题,我实际上给出了两个选择。
第一种方式,测试文件权限:
//adapted from https://stackoverflow.com/questions/11775884/nodejs-file-permissions#answer-11781404
var fs = require('fs')
function canWrite(directory) {
var stat = fs.statSync(directory)
// 2 is the octal value for chmod -w-
return !!( 2 & (stat.mode & parseInt('777', 8)).toString(8)[0] ) //first char is the owner
}
如果用户 (process.uid) 既不是文件系统所有者 (stat.uid) 也不属于其组 (process.gid vs stat.gid) 怎么办?
它仍然会获得644 权限并且无法写入。
我们如何才能知道(使用 nodejs)当前用户属于文件系统组(stat.gid)? Easy in bash 但要便携,它会与 nodejs 混淆。
第二种方式,懒惰:
var fs = require('fs')
var canWrite = true
try {
fs.writeFileSync('./test')
fs.unlinkSync('./test')
} catch(e) {
canWrite = false
}
if(canWrite) {
//go for it
}
懒惰的解决方案,但它应该可以完成工作。这也可能会阻塞内核缓冲区。另一方面,fs.Stat 通常被操作系统缓存。
这些解决方案都不是完美的。
你会怎么做?我有什么遗漏吗?
【问题讨论】:
标签: node.js