【发布时间】:2021-01-14 15:03:22
【问题描述】:
我无法弄清楚为什么 Windows 会创建具有只读属性集的新文件。我想要的是对我将用作简单的基于文件的数据存储的文件的独占随机访问写入权限。我对其他进程读取它没问题,但我只希望一个进程能够写入它。
我尝试了几种不同的打开标志变体,但无论我做什么,Windows 似乎都在文件上设置了只读属性。因此,关闭文件后,尝试重新打开以进行写入失败。我知道我可以在事后手动尝试操纵该属性,但这是倒退的。我不希望属性首先出现。当我关闭文件时,其他人打开文件应该是安全的。
FS.open(filePath + '.lock', 'w+', 6, (err, fd) => {
if (err) console.log('failed to open lock file', err);
else {
console.log('successfully opened lock file');
setTimeout(() => {
FS.close(fd, () => {
console.log(`closed lock file`);
setTimeout(() => {
console.log(`attempt reopening the file...`);
FS.open(filePath + '.lock', 'w+', 6, (err, fd) => {
if (err) console.log('failed to open lock file', err);
else {
console.log(`file closed successfully`);
FS.closeSync(fd);
}
});
}, 500);
});
}, 500);
}
});
输出:
successfully opened lock file
closed lock file
attempt reopening the file...
failed to open lock file [Error: EPERM: operation not permitted, open 'D:\salix\test.data.lock'] {
errno: -4048,
code: 'EPERM',
syscall: 'open',
path: 'D:\\dev\\test.data.lock'
}
如您所见,文件似乎设置了只读属性,即使在文件关闭后也是如此。
【问题讨论】: