一位朋友问我这个问题,我给了事实上两个选择。
首先,测试文件权限:
//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
通常由操作系统缓存。
这些解决方案都不是完美的。
你会怎么做?有什么我想念的吗?答案 0 :(得分:14)
怎么样:
var fs = require('fs');
fs.access(__dirname, fs.constants.W_OK, function(err) {
if(err){
console.error("can't write");
process.exit(1);
}
console.log("can write");
process.exit(0);
});
fs.constants.W_OK
:文件可由调用流程撰写。
如果使用sudo
运行上述内容,则可能会根据用户权限获得不同的输出。