Node.js читает и записывает поток в один и тот же файл одновременно - PullRequest
0 голосов
/ 28 сентября 2018

TL; DR

Я просматриваю ряд решений по npm и github в поисках чего-то, что позволило бы мне read и writeв один и тот же файл в двух разных местах одновременно.Пока у меня проблемы с тем, чтобы найти что-то подобное.Есть ли какой-нибудь модуль, который позволит это?

Фон

По сути, мое требование заключается в том, что в большом файле мне нужно, в следующем порядке:

  • чтение
  • преобразование
  • запись

В идеале использование будет примерно таким:

const fd = fs.open(file, "r+");
const read = createReadStreamSomehowFrom(fd);
const write = createWriteStreamSomehowFrom(fd);

read
   .pipe(new Transform(transform() {...}))
   .pipe(write);

Я мог бы сделать это стандартным fs.create[Read/Write]Stream, но нет никакого способа контролировать поток обоих потоков, и если моя позиция записи выходит за пределы позиции чтения, то я читаю что-то, что я только что написал ...

Вариант использованиято же самое, что и perl -p -i -e, чтение и запись в один и тот же файл (имеется в виду один и тот же инод) асинхронно и замена содержимого без загрузки всего в память.Реализации, которые я обнаружил, на самом деле загружают весь файл в память, а затем сохраняют его.Я пропускаю известный модуль или есть необходимость написать что-то вроде этого?

1 Ответ

0 голосов
/ 05 ноября 2018

Хм ... кажется, это очень сложно:)

Так что для справки - я не нашел такого модуля и фактически обсудил это с некоторыми людьми, ответственными за хороший модуль замены в файле.Не видя возможности решить эту проблему, я решил написать это с нуля, и вот оно:

Модуль работает по простому принципу: ни один байт не может быть записан до тех пор, пока он не будет использован в читаемом потоке, а под ним довольно просто (пара fs.read/write операцийс вниманием к точке чтения и записи).

Если вы найдете это полезным, то я счастлив.:)

...