windows 只读属性中的 nodejs fs 模式操作

nodejs fs mode manipulation in windows read-only attribute

我是 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]);
           }
       }
   }
});

我找到了解决方案。基本上,只读文件和不只读文件之间的位差值为 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);
};

我认为 0x92 (146) 不正确。 0x92 正在检查 'other' 写入位和 'group' 执行位。它应该是 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

我在 Windows 上设置了“666”模式

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

提到的146等同于八进制数0o222