NodeJS StreamReader读取偶数文件被删除

时间:2016-10-12 13:58:58

标签: node.js error-handling stream

我使用createReadStream实现了大文本文件阅读。在我的实现中,我想测试错误处理。

所以我开始处理并重命名文件,仍读取整个文件,并在控制台上打印所有数据。在第二次尝试我做了同样但这次我删除了文件,结果相同,整个文件被读取并打印在控制台上。

简而言之,我正在使用createReadStream读取文件,即使我重命名/删除文件,在阅读开始后,它仍会一直读到最后。

以下是一个示例实现

const fs = require('fs');
const readableStream = fs.createReadStream('mySampleTextFile.txt');

readableStream.on('data', (chunk) => console.log(chunk));
readableStream.on('end', () => console.log('Read till end !'));

mySampleTextFile.txt包含600k行,每行只有数字,我验证了记录的最后一个数字与原始文件中的完全相同。
我在执行结束前删除文件,我打开了两个终端,在一个中我开始执行,在第二个i fire delete / rename命令。
我试图删除永久性意味着直接删除,而不是垃圾。

我错过了Stream的一些基本内容吗?请帮助我,它没有破坏任何东西,但为什么它没有破坏?

1 个答案:

答案 0 :(得分:1)

至少在Unix类型的OS上,当你打开文件时删除文件时,打开文件的进程仍然可以从中读取(或写入文件)。

删除这样的文件只会删除其目录条目,因此在运行ls或文件浏览器时您无法再看到它,但它占用的磁盘空间将不会被标记为“可用”,直到有没有更多的进程引用该文件(即打开它)。

您可以尝试截断文件而不是删除文件:

cp /dev/null mySampleTextFile.txt