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
我是 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