Node.js Version: v10.16.1
OS: macOS 10.14.5
Scope (install, code, runtime, meta, other?): code
Module (and version) (if relevant): fs
关联: https://github.com/nodejs/hel...
复现步骤:
1) 创建一个writeStream
> node
const fs = require('fs');
const ws = fs.createWriteStream('./test', { flags: 'a' })
这时候系统中会创建文件
2) 可以写入一些内容
ws.write('123\n');
ws.write('123\n');
ws.write('123\n');
3) 把文件删除移动到废纸篓或者删除
4) 继续调用write()
写入
fs.existSync('./test'); // false
ws.on('error', err => console.log(err)); // 并不会报错
ws.write('123\n');
ws.write('123\n');
ws.write('123\n');
此时即使文件已经不存在,也不会再创建文件,调用方法也不会出现报错。
期望的结果是能继续写入文件,如果文件路径改变或者被删除,也能在目标路径中继续创建文件写入
这个事情与操作系统/文件系统有关。
Windows 一般不存在这种情况,它在文件被打开时会禁止文件的删除或移动。
Linux / MacOS 用的是不同的文件系统,可以在文件还被打开的时候删除和移动。
有些 Linux 系统用 inotify 可以用于监控文件的变化,npm 里也有一个 inotify 包。但是不确认在 MacOS 下是不是好使。
然后,就是只能定期看一下文件是不是有变化了,比如定期用
fs.stats
看一下文件还在不在,以及 stats.ino 是不是变化了(有可能原来的文件被移动了,但是在原位置又新创建了一个同名文件)