簡體   English   中英

EPERM 阻止的文件寫入權限 - 刪除然后寫入新文件。 Node.js

[英]File writing permissions blocked by the EPERM - Deleting then writing a new file. Node.js

我有一個文件系統 function 刪除一個文件,然后使用所有新數據創建一個新文件,我正在尋找一種可能的解決方案來解決隨機發生的錯誤,而不是每次發生,而是每隔一段時間發生一次。 這是我當前的代碼:

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' 事件從錯誤日志中消失了。

關於為什么會發生此錯誤以及如何解決此錯誤的任何想法?

看起來您正在使用異步 fs 調用。 異步調用不是這樣工作的。

您可以搜索 NodeJS 異步編程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM