Как сделать так, чтобы данные записывались в файл при вызове WriteStream.write()
?
Изменить: как оказалось, это работает, когда я использую REPL и вызываю функцию. Однако в моей программе это не работает:
import * as FS from "fs";
import { LetterGroup } from "./LetterGroup";
import { Dictionary } from "./Dictionary";
import { Word } from "./Word";
import * as OS from "os";
const groups: Array<LetterGroup> = LetterGroup.letterGroupsFromString(FS.readFileSync("./letterGroups.txt").toString());
const dictionary = Dictionary.create(FS.readFileSync("./dictionary.txt").toString());
const inputStr: string = FS.readFileSync("./input.txt").toString();
const inputWords = new Array<Word>();
const fileStream = FS.createWriteStream("./output.txt");
for (const line of inputStr.trim().split(OS.EOL))
{
inputWords.push(new Word(line));
}
function permute(index: number)
{
index = Math.floor(index);
if (!(index >= 0 && index < inputWords.length))
{
return;
}
const word: Word = inputWords[index];
let outputString: string = "";
outputString += `Valid permutations of '${word.wordString}':` + OS.EOL;
console.log(`Testing '${ word.wordString }'...`);
for (const permutation of word.generatePermutations(groups, dictionary, true))
{
outputString += permutation.wordString + OS.EOL;
}
outputString += OS.EOL;
console.log();
if (!fileStream.write(outputString))
{
console.log("Wrote to file too fast! Will resume writing once the system catches up...");
fileStream.once("drain", () => permute(index));
return;
}
permute(index + 1);
}
permute(0);
Следует отметить, что word.generatePermutations
- чрезвычайно интенсивная функция, и ее возврат может занять несколько минут (иногда более часа). Моя проблема в том, что данные, которые он возвращает, должны быть немедленно записаны в выходной файл, чтобы не нужно было завершать работу всей программы, чтобы результаты были прочитаны. Надеюсь, кто-нибудь сможет понять все это.
Чтобы уточнить, данные, записанные в WriteStream
в REPL, немедленно записываются в файл, в то время как данные не записываются в файл в моей программе, пока вся программа не завершит работу.
fs.write()
для решения проблемы, но это не меняет того факта, что на мой исходный вопрос нет ответа. Я специально хочу знать, есть ли способ заставить WriteStream синхронизировать свои данные с диском, когда данные записываются на него. Кажется, это работает в REPL, но не в моей программе. Отредактирую исходный вопрос. - person John Leuenhagen   schedule 24.01.2018