node.js проверяет, завершено ли копирование нового файла на диск - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь написать привязанное приложение для стрельбы с помощью электрона / node.js.

Связь между камерой и компьютером управляется программным обеспечением, которое поставляется вместе с камерой.Новые изображения напрямую копируются на мой локальный жесткий диск.После этого мое приложение должно показывать новую картинку как можно быстрее.

Я настроил наблюдателя chokidar для каталога, куда приходят мои новые картинки.К сожалению, опция chokidar

awaitWriteFinish: {stabilityThreshold: 500, pollInterval: 50}

работает очень медленно и иногда вызывает событие add слишком рано.

Моя идея обойти это было написать собственный опросМеханизм после наблюдателя (без опции awaitWriteFinish) вызывает событие.

Я пытался использовать fs.stats для опроса, но fs.stats не распознает текущий размер файла, но общий размер файла.

Существует ли простой метод node.js / javascript / jquery для определения, полностью ли записан новый файл на диск?

Любая помощь оценена.

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Полагаю, вы можете посмотреть каталог на предмет изменений. Возможно, сначала отсканируйте его, чтобы получить список файлов. Например, если файл находится в Windows, и файл сохраняется на C: \ temp

const fs = require('fs')
const saveDir = 'C\\temp'

let currentFiles = [];

// Read all cuurent files in directory
fs.readdirSync(saveDir, (error, files) =>
{
  currentFiles = files;
});


fs.watch(saveDir, (eventType, fileName) => 
{
  if (currentFiles.includes(fileName))
  {
    return;
  }
  
  // Handle rename event
  
  // Handle change event
  
});

Подробнее здесь:

https://nodejs.org/api/fs.html#fs_fs_watch_filename_options_listener

0 голосов
/ 18 сентября 2018

Я бы использовал ручной подход, как это.

fs.writeSync()

notifyWhateverEnpoint('writing is finished!') // depending on your app, you should choose how to notify it about finishing
...