ストリーミングを使用して小さなファイルを1つのファイルにマージしようとしています。 データを書き込んだ後、streamWrite.end()
を呼び出しても、ファイルサイズは0のままです。プログラムの実行が終了すると、ファイルには書き込まれたデータが書き込まれます。Nodejsストリームは終了後にファイルを更新しません
私の質問: 私はwriteStream.end()とそれを解決する方法の後にファイルサイズが0だったのはなぜですか?ここで
問題はend()
が非同期であることで、全体のコード
var fs = require('fs');
function createRandomJsonFiles(destPath,numOfFiles,minFileSize)
{
for(var i=0;i<numOfFiles;i++){
var tmp = {};
tmp.k1 = new Array(Math.floor(Math.random() * minFileSize) + minFileSize).join('a');
fs.writeFileSync(destPath+'/testfile.'+i, JSON.stringify(tmp));
}
}
createRandomJsonFiles("./testFiles/",1000,100); // create some files
var streamWrite = fs.createWriteStream('write.tst');
var files = fs.readdirSync("./testFiles/");
for (var i = 0; i < files.length; ++i) { // merge the files to one file
var inputPath = "./testFiles/" + files[i];
var file_data = fs.readFileSync(inputPath).toString();
var canContinue = streamWrite.write(file_data); // write the chunk to the file system and close the stream
if (!canContinue){
streamWrite.emit('drain');
}
}
streamWrite.end();
var chunkContent = fs.readFileSync('write.tst').toString();
console.log(chunkContent);
このソリューションには、コードの最後の3行を変更する必要があります。 http://stackoverflow.com/questions/18932488/how-can-i-use-the-drain-event -with-createwritestream-method-in-node-js –