如何在 Node.js 中使用 chmod
Posted
技术标签:
【中文标题】如何在 Node.js 中使用 chmod【英文标题】:How do I use chmod with Node.js 【发布时间】:2012-02-04 02:41:07 【问题描述】:?
包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 或类似命令。 【参考方案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,根本不知道它是如何工作的。也许这只是一种模拟(如果我错了,请原谅我)。这篇文章可能会有所帮助:***.com/questions/8682672/… MSYS 似乎忽略了文件模式。【参考方案2】:指定八进制的正确方法如下:
fs.chmodSync('test', 0o755);
参考文件模式here。
【讨论】:
以上是关于如何在 Node.js 中使用 chmod的主要内容,如果未能解决你的问题,请参考以下文章
如何使用node.js更改同一文件夹中的所有文件和文件夹权限
如何使用 Passport.js 在 Node.js 中重置/更改密码?