为啥数据没有写入文件?

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() 没有完成将字符串数据写入文件,为啥?

为啥用C#在磁盘上写入文件后内存没有释放

JAVA write为啥无法写入数据?

数据库异常信息为啥没有写入log4j日志文件中

为啥我的网站没有加载,而是出现此错误 - “Smarty:无法写入文件”?

python处理完CSV数据后重新写入新CSV文件,为啥新文件用记事本打开没有双引号?该怎么解决?谢谢