我使用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的一些基本内容吗?请帮助我,它没有破坏任何东西,但为什么它没有破坏?
答案 0 :(得分:1)
至少在Unix类型的OS上,当你打开文件时删除文件时,打开文件的进程仍然可以从中读取(或写入文件)。
删除这样的文件只会删除其目录条目,因此在运行ls
或文件浏览器时您无法再看到它,但它占用的磁盘空间将不会被标记为“可用”,直到有没有更多的进程引用该文件(即打开它)。
您可以尝试截断文件而不是删除文件:
cp /dev/null mySampleTextFile.txt