EPERM 阻止的文件写入权限 - 删除然后写入新文件。节点.js

Posted

技术标签:

【中文标题】EPERM 阻止的文件写入权限 - 删除然后写入新文件。节点.js【英文标题】:File writing permissions blocked by the EPERM - Deleting then writing a new file. Node.js 【发布时间】:2021-03-25 17:09:29 【问题描述】:

我有一个文件系统功能,它删除一个文件,然后用所有新数据创建一个新文件,我正在寻找一个可能的解决方案来解决随机发生的错误,而不是每次发生,而是每隔一段时间发生一次。这是我当前的代码:

try 
   if(fs.existsSync(file)) 
      fs.unlink(file, function (err) ); 
   
 catch (error)
   console.log('There was no file to be deleted');

fs.open(file, 'w', function (err, file) 
   if (err) throw err;
);
var logger = fs.createWriteStream(file, 
    flags: 'a' // 'a' means appending (old data will be preserved)
);

偶尔会抛出错误:

C:\Users\codel\OneDrive\Documents\BattlEye\index.js:265
        if (err) throw err;
                 ^

Error: EPERM: operation not permitted, open 'C:\Users\codel\OneDrive\Documents\BattlEye\files\610636905440215071.txt'
Emitted 'error' event on WriteStream instance at:
    at internal/fs/streams.js:375:14
    at FSReqCallback.oncomplete (fs.js:171:23) 
  errno: -4048,
  code: 'EPERM',
  syscall: 'open',
  path: 'C:\\Users\\codel\\OneDrive\\Documents\\BattlEye\\files\\610636905440215071.txt'

首先值得注意的是,这是一个云驱动器(OneDrive)。由于我对权限缺乏了解,我决定通过将文件传输到我的硬盘驱动器来测试问题是否出在 OneDrive 中。结果并不令人惊讶。它没有改变任何事情。

C:\Users\codel\Documents\BattlEye\index.js:265
        if (err) throw err;
                 ^

[Error: EPERM: operation not permitted, open 'C:\Users\codel\Documents\BattlEye\files\610636905440215071.txt'] 
  errno: -4048,
  code: 'EPERM',
  syscall: 'open',
  path: 'C:\\Users\\codel\\Documents\\BattlEye\\files\\610636905440215071.txt'

但是 WriteStream 上的 Emmitted 'error' 事件从错误日志中消失了。

关于为什么会发生此错误以及如何修复它的任何想法?

【问题讨论】:

可能重复 - ***.com/questions/34600932/… 【参考方案1】:

看起来您正在使用异步 fs 调用。异步调用不是这样工作的。

你可以搜索一下NodeJS异步编程。

【讨论】:

哪一部分做错了?如果是这样,它只能是错误的一半吗?

以上是关于EPERM 阻止的文件写入权限 - 删除然后写入新文件。节点.js的主要内容,如果未能解决你的问题,请参考以下文章

检查 .NET 中的目录和文件写入权限

我可以将文件写入linux目录,指定cfscript中的文件权限吗?

“go test”和“bazel test”中的文件权限错误不同

如何在写入文件时阻止对文件的访问,并在文件写入后恢复执行?

站点级文件夹从网页读取/写入/删除权限

如何避免给予777许可