【问题标题】:How do I use chmod with Node.js如何在 Node.js 中使用 chmod
【发布时间】:2012-02-04 02:41:07
【问题描述】:

如何在 Node.js 中使用 chmod?

fs里面有个方法,应该可以这样,但是不知道第二个参数取什么。

fs.chmod(路径、模式、[回调])

异步 ​​chmod(2)。除了可能的异常之外,没有为完成回调提供任何参数。

fs.chmodSync(路径,模式)

同步 chmod(2)。

(来自Node.js documentation

如果我这样做

fs.chmodSync('test', 0755);

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

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

也不行。

顺便说一句,我正在使用 Windows 机器。

【问题讨论】:

  • 我觉得windows的权限比较复杂……如果解决不了的话可以去github上开一个issue。
  • 必须同意@thejh 关于这一点... Windows 文件权限要复杂得多。您可能需要执行 cmd.exe 或类似命令。

标签: node.js chmod fs


【解决方案1】:

根据第508行的源代码/lib/fs.js

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,根本不知道它是如何工作的。也许这只是一种模拟(如果我错了,请原谅我)。这篇文章可能会有所帮助:stackoverflow.com/questions/8682672/…
  • MSYS 似乎忽略了文件模式。
【解决方案2】:

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

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

参考文件模式here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-09
    • 2023-03-09
    • 1970-01-01
    • 2022-01-20
    • 2019-11-24
    • 1970-01-01
    • 2021-08-31
    • 2013-11-04
    相关资源
    最近更新 更多