如何在Node.js中使用chmod

58

如何在Node.js中使用chmod?

可以使用fs包中的方法来完成,但我不知道它需要什么作为第二个参数。

fs.chmod(path, mode, [callback])

异步的chmod(2)。除了可能的异常之外,没有其他参数被传递到完成回调函数中。

fs.chmodSync(path, mode)

同步的chmod(2)。

(摘自Node.js文档)

如果我这样做:

fs.chmodSync('test', 0755);

什么都没有发生(文件未更改为该模式)。

fs.chmodSync('test', '+x');

同样不起作用。

顺便说一下,我是在Windows机器上工作的。


2
我认为Windows权限更加复杂……如果您无法解决问题,可能需要在GitHub上开个问题。 - thejh
1
必须同意@thejh的观点... Windows文件权限更加复杂。您可能需要执行cmd.exe或类似命令。 - Tracker1
3个回答

70
根据其源代码 /lib/fs.js 的508行:
fs.chmodSync = function(path, mode) {
  return binding.chmod(pathModule._makeLong(path), modeNum(mode));
};

并且在203行:

function modeNum(m, def) {
  switch (typeof m) {
    case 'number': return m;
    case 'string': return parseInt(m, 8);
    default:
      if (def) {
        return modeNum(def);
      } else {
        return undefined;
      }
  }
}

它需要一个八进制数或字符串作为输入。
例如:
fs.chmodSync('test', 0755);
fs.chmodSync('test', '755');

在您的情况下它不起作用,因为文件模式只存在于*nix机器上。

抱歉,我没有使用过MSYS,也不知道它是如何工作的。也许它只是一种模拟(如果我错了,请原谅)。这篇帖子可能会有所帮助:https://dev59.com/Al7Va4cB1Zd3GeqPM8eK - qiao
1
MSYS似乎忽略文件模式。 - pvorb

22

正确指定八进制的方法如下:

fs.chmodSync('test', 0o755); 

请参考文件模式此处


0
在Windows上,你需要使用fs.constantsfsPromises.constants,而不是八进制数或字符串。例如,要将文件更改为只读访问,你可以使用以下代码:
fs.chmodSync(filePath, fs.constants.O_RDONLY)

您可以在此处找到fs.constants的值:Node文件系统常量


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接