Проверка изменений в содержимом файла - PullRequest
0 голосов
/ 01 августа 2020

Я пишу сценарий, который проверяет JSON файлы в каталоге и обновляет коллекцию MongoDB документами, содержащими данные, найденные в этих файлах.

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

На данный момент я использую этот код для проверки JSON файлов / чтения их содержимого:

import fs from 'fs'

fs.readdir(`../Items`, (err, files) => {
  if (err) console.error(err)

  files = files.filter((file) => file.split('.').pop() === 'json')

  if (files.length <= 0) return console.error('No items to process!')

  files.forEach((file, i) => {
    fs.readFile(`../Items/${file}`, (err, data) => {
      if (err) return console.error(err)
      console.log(data)
    })
  })
})

Я думаю, что узнаю дата последнего изменения файла и его MD5 ha sh были бы способом сделать это, но я не уверен, как получить те, которые используют fs.

Ответы [ 2 ]

2 голосов
/ 01 августа 2020

Вы можете сделать это, используя атрибут mtime из функции stat. Подробнее здесь: attacomsian

const fs = require('fs');

// fetch file details
fs.stat('file.txt', (err, stats) => {
    if(err) {
        throw err;
    }

    // print file last modified date
    console.log(`File Data Last Modified: ${stats.mtime}`);
    console.log(`File Status Last Modified: ${stats.ctime}`);
});
1 голос
/ 01 августа 2020

Рекомендую проверять, изменено ли содержимое файла с помощью Ha sh. Это намного надежнее, когда при изменении содержимого файла изменяется и ha sh. Этот фрагмент кода может вам помочь. Надеюсь, это поможет.

const crypto = require('crypto')
const fs = require('fs')

const fileContent = fs.readFileSync('./uploadedFile.json', { encoding: 'utf-8' })
const fileUploadedHash = crypto.createHash('md5').update(fileContent).digest('base64');

if(fileUploadedHash !== existingFileHash) {
  // update data in MongoDB
}
...