为啥数据没有写入文件?
Posted
技术标签:
【中文标题】为啥数据没有写入文件?【英文标题】:Why is the data not being written to the file?为什么数据没有写入文件? 【发布时间】:2019-09-13 14:22:36 【问题描述】:我正在尝试使用虚拟数据创建文件。由于文件会很大,包含 32^5 个数据点,因此我使用的是写入流。但我看不到任何数据被写入文件。这可能是什么原因?
const faker = require('faker');
const fs = require('fs');
const os = require('os');
const MAX_DATA_POINTS = Math.pow(32, 5)
const stream = fs.createWriteStream('sample-data.csv', flags : 'a' );
for(let i = 0; i < MAX_DATA_POINTS; i++)
console.log(i)
stream.write(`$faker.name.findName(), $i $os.EOL`);
console.log(`Written $MAX_DATA_POINTS .. `);
【问题讨论】:
【参考方案1】:如果 stream 希望调用代码在继续写入其他数据之前等待发出 drain 事件,则 write
方法返回 false
否则为真。很可能流没有耗尽,对write()
的调用只是缓冲块并返回false。
您需要等到所有 缓冲块 被耗尽(操作系统接受传送)。发生这种情况时,将发出 drain 事件。
注意: 建议一旦 write() 返回 false,在发出 'drain' 事件之前不要再写入块。
您可以按照我给出的方式修改您的 dummy-csv 文件创建者代码。
const faker = require('faker');
const fs = require('fs');
const os = require('os');
const MAX_DATA_POINTS = Math.pow(32, 5);
let c = 0;
const stream = fs.createWriteStream('sample-data.csv', flags : 'a' );
function write()
let ok = true;
do
c++;
ok = stream.write(`$faker.name.findName(), $c $os.EOL`);
while (c < MAX_DATA_POINTS && ok);
if(c < MAX_DATA_POINTS)
stream.once('drain', write)
write()
【讨论】:
以上是关于为啥数据没有写入文件?的主要内容,如果未能解决你的问题,请参考以下文章
php fwrite() 没有完成将字符串数据写入文件,为啥?