簡體   English   中英

fs.createReadStream 錯誤; uncaughtException: ENOENT: 沒有這樣的文件或目錄

[英]fs.createReadStream error; uncaughtException: ENOENT: no such file or directory

我正在流管道中進行一些文件處理,並想測試一些錯誤情況。 我想到的第一件事是打開不存在的文件。 我發現我無法處理這種情況。 看起來 node.fs 沒有發出“錯誤”事件。 有人知道如何處理這個案子嗎? 我讀過 fs.unlink 也有同樣的情況。

const fName = 'C:/temp/fff.txt';
const outStream = fs.createWriteStream(fName + '.enc');
console.log(`-- 1111 ${fName} `);
fs.createReadStream(fName)
.pipe(outStream)
.on('open', () => {
  console.log(`ON OPEN  ${fName}`);
})
.on('error', (err) => {
  console.log(`ON ERROR ${fName}; an error happened: ${err.message}`);
})
.on('close', () => {
  console.log(`ON CLOSE  ${fName}`);
})
.on('end', () => {
  console.log(`ON END  ${fName}`);
});
console.log(`-- 2222 ${fName} `);

如果文件存在輸出:

-- 1111 C:/temp/fff.txt
-- 2222 C:/temp/fff.txt
...
ON OPEN  C:/temp/fff.txt
ON CLOSE  C:/temp/fff.txt

如果文件不存在:

-- 1111 C:/temp/fff.txt
-- 2222 C:/temp/fff.txt
...
ON OPEN  C:/temp/fff.txt
2022-06-13T19:28:48.379Z; error; uncaughtException: ENOENT: no such file or directory, open 'C:\temp\ffff.txt'
Error: ENOENT: no such file or directory, open 'C:\temp\ffff.txt';

C:\Users\p>

類似問題: 這里

人們問:是否有可能在 stream.on('error', ...) 生效之前發出錯誤事件?

非常感謝

看起來 stream.pipe 不轉發“錯誤”事件,所以如果你想處理錯誤,你需要做下面的事情,或者使用stream.pipeline

rstream
   .on('error', handleError)
   .pipe(foo)
   .on('error', handleError)
   .pipe(bar)
   .on('error', handleError);

感謝這次討論

暫無
暫無

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

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