3

我是 NodeJS 的新手,我很难解密模式值并弄清楚如何更改模式以删除只读属性。以下是我如何发现此文件夹的模式为 16822。如何确定 16822 在 Windows 中的含义,然后如何更改模式以使其没有只读属性?

fs.mkdir('./build');
fs.stat('./build', function(err, stats){
   if(stats.isDirectory()){
       console.log('Its a dir');

       for(var i in stats){
           if('function' !== typeof stats[i]){
               console.log(i + '\t= ' + stats[i]);
           }
       }
   }
});
4

3 回答 3

3

我找到了解决方案。基本上,只读文件和没有只读文件的文件之间的位差值为 146。检查这些位后,我发现这种差异在模式值(128、16 和 2)中匹配。这是我的解决方案:github issue with readonly

还进行了改进,我将流传递给允许我转换文件然后使用事件流传递它的函数:

function removeReadonly(){
  function transform(file, cb){
    if((file.stat.mode & 146) == 0){
      file.stat.mode = file.stat.mode | 146;
    }
    cb(null,file);
  };

  return require('event-stream').map(transform);
};
于 2015-05-05T20:34:43.417 回答
3

我相信 0x92 (146) 是不正确的。0x92 正在检查“其他”写入位和“组”执行位。它应该是 0x222 (546)。

各种文件的文件访问设置是:

4000:隐藏文件

2000 : 系统文件

1000:存档位

0400 : 单独读取

0200 : 个人写

0100 : 单独执行

0040 : 组读

0020 : 组写

0010 : 组执行

0004 : 其他读取

0002 : 其他写入

0001 : 其他执行

其中1代表执行,2代表写,4代表读

http://www.codingdefined.com/2014/10/alter-file-permissions-in-nodejs.html

于 2015-06-23T16:35:12.660 回答
2

我通过设置“666”模式在 Windows 上做到了

setReadAndWritePermissions(filePath) {
    let mode = fs.statSync(filePath).mode;
    let newMode = mode | 0o666;
    this.nodeFs.chmodSync(filePath, newMode);
}

提到的 146 与八进制数 0o222 相同

于 2019-07-10T10:45:31.197 回答