Как я могу гарантировать, что 'fs.appendFileSync' никогда не будет успешным частично? - PullRequest
0 голосов
/ 28 октября 2019

До сих пор я предполагал, что если fs.appendFileSync выдает исключение, то гарантируется, что содержимое целевого файла не изменилось ни на один бит.

Официальная документацияэтой функции не относится к этой проблеме (и к случаям сбоя в целом).

Исходный код этой функции показывает, что она вызывает fs.writeFileSync, что вход делает это:

  try {
    while (length > 0) {
      const written = fs.writeSync(fd, data, offset, length, position);
      offset += written;
      length -= written;
      if (position !== null) {
        position += written;
      }
    }
  } finally {
    if (!isUserFd) fs.closeSync(fd);
  }

Можно ли из вышесказанного сделать вывод, что fs.appendFileSync может вызвать исключение после частичного изменения целевого файла?

Если да, то есть ли какие-либо известные инструменты илипарадигмы для решения этой довольно трудной для понимания ситуации?

Большое спасибо!

1 Ответ

1 голос
/ 28 октября 2019

Да, fs.appendFileSync не поддерживает никакие формы транзакций. Хотя я не знаю какого-либо частичного nodeJS-модуля для этого варианта использования, вы можете сделать это вручную,

  • , продублировав файл
  • , добавив в дубликат tmp-файл
  • переименование / замена исходного файла на файл tmp
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...