2015-05-13 2 views
0

Я нашел этот вопрос в следующих двух ситуациях.Файл становится пустым во время операции записи js

  1. Когда на сервере имеется много свободного места.
  2. Если на сервере нет свободного места.

Я читаю конкретный файл в формате JSON, используя следующие:

fs.readFileSync(_file_path, 'utf-8'); 

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

fs.writeFileSync(_file_path, {stringified-json}); 

Во время этой операции мой файл когда-то становится пустым, теперь я пытаюсь воспроизвести эту проблему локально, но не могу ее воспроизвести.

ответ

1

fs.writeFileSync() бросит, если произошла ошибка, поэтому убедитесь, что у вас есть код в блоке try/catch и что ваш catch не просто глотания ошибки. (Например, пустой блок catch приведет к проглатыванию исключения или, другими словами, игнорируется.)

Если это сценарий или какой-либо другой процесс, который может запускаться несколько раз одновременно (например, несколько процессов или вы используете рабочих), тогда вам нужно использовать блокировку файлов или какой-либо другой механизм, чтобы убедиться, что у вас нет состояния гонки. Если процесс A открывает файл для записи (тем самым опуская его), а затем процесс B открывает файл для чтения, пока процесс A не завершится с файлом, что может привести к пустующему файлу, если процесс B читает пустой файл и код написан так что в результате он напишет пустой файл.

Без дополнительной информации (например, журналов ошибок) любой ответ, вероятно, будет полезен для чистой работы. Но это две вещи, которые я проверял.

+0

Если он бросает, не должен ли он остановить весь процесс ...? –

+0

Вы правы. Я отредактировал ответ, чтобы указать, что это будет только в том случае, если уже есть блок try/catch, и он проглатывает ошибку. Я также добавил вторую возможность (состояние гонки между работниками или несколькими процессами). Я думаю, что без дополнительной информации любой ответ будет в значительной степени угадывать работу. – Trott

+0

Trott, я использую ошибку try catch, но есть вероятность второго шанса, но я уверен, что я не освобождаю файл, но я его проверю. Благодарю. – HDB

Смежные вопросы