アプリケーションはユーザーのテキストファイルを読み込み、それぞれはユーザーによって変更できます。 アプリの起動時に、前回以降にファイルが変更されたかどうかをチェックしたいと思います。 私は、最も効率的な方法は、各ファイルのチェックサムを計算し、1つのjsonファイルに保存することだと思う。 アプリの起動時に、私は各ファイルチェックサムをチェックし、それをjsonファイルのデータと比較します これを行うための最適/効率的な方法はもうありますか?または、ファイルチェックサムの正確な計算方法は?このブログのようなNodeJSは変更されたファイルを検出します
答えて
は(そして、あなたが実際にファイル全体を読んでいない)ファイル全体を読み込み、それが唯一のメタデータであるとして、チェックサムを比較するよりもはるかに高速です。
また、ファイルが異なるディレクトリにある場合は、フォルダが変更されたかどうかをテストできます。これはI/O呼び出しを減らすことができます(最終変更日が変更されなかった場合は、そのフォルダのファイルのチェックをスキップできます)。
「最終変更日」を保存する必要があります。これにはRedisを使用します。変更のたびに、最初の実行時にそれを更新する必要があります。ここ
は、ファイルまたはフォルダが変更されたかどうかをテストする機能(関数呼び出し)である:
let fs = require('fs');
let moment = require('moment');
let path = 'views'; //your folder path (views is an example folder)
wasFileChanged(path, (err,wasChanged) => {
if (wasChanged){
console.log('folder was changed, need to compare files');
//need to update redis here
//...comapre files to find what was changed
}
else{
console.log('folder was not changed');
}
});
/**
* Checks if a file/folder was changed
*/
function wasFileChanged(path, callback) {
fs.open(path, 'r', (err, fd) => {
if (err) {
return callback (err);
} else {
//obtain previous modified date of the folder (I would use redis to store/retrieve this data)
let lastModifed = '2016-12-03T00:41:12Z'; //put the string value here, this is just example
fs.stat(path, (err, data) => {
console.log('check if file/folder last modified date, was it after my last check ');
//I use moment module to compare dates
let previousLMM = moment(lastModifed);
let folderLMM = moment(data.mtime.toISOString());
let res = !(folderLMM.isSame(previousLMM, 'second')); //seconds granularity
return callback (null, res);
});
}
});
}
はい、それは考えです。私は、私に各ファイルを読み込ませないようなものがあるべきであることを知っていました。そして、私の目的のために「lastModifies」がうまく適合しています。私はあなたにそのコードについて書かれていましたが、アイデアで十分です:pありがとう –
フォルダが変更されたかどうかをテストできますか?フォルダ内のファイルの内容が変更されている場合、フォルダのmtimeは変更されません。https://stackoverflow.com/questions/3620684/directory-last-modified-date –
@SidVishnoiフォルダが変更されたかどうかを確認するには最初にmtime(ファイル/フォルダが追加/削除されていれば十分でしょう)を確認し、fsを使用してファイルのリストを取得し、既存のファイルが変更されたかどうかを確認します。 mtimeと既存のすべてのファイルが変更されなかった場合、そのフォルダは変更されませんでした。 – RLaaa
sSeemsはあなたのために良いの読み取りです:http://blog.tompawlak.org/calculate-checksum-hash-nodejs-javascript
コード(ブログから)例:
var crypto = require('crypto');
function checksum (str, algorithm, encoding) {
return crypto
.createHash(algorithm || 'md5')
.update(str, 'utf8')
.digest(encoding || 'hex')
}
ファイルから読み取られ、そのハッシュを提示する:
fs.readFile('test.dat', function (err, data) {
checksum(data); // e53815e8c095e270c6560be1bb76a65d
checksum(data, 'sha1'); // cd5855be428295a3cc1793d6e80ce47562d23def
});
ファイルが変更されたかどうかを調べるためにチェックサムを比較すると、fs.stat
fs.stat
を使用すると「最終更新」をチェックすると信じて
私はそれを見ましたが、私はこれについては分かりません。それは多くのファイルを読み込み、実際にそれらのすべてを読むことが最良の選択肢ではないようです。私はこれの効率を恐れています。多分、私の場合にはより適切なものがあるかもしれません。 –
@PiotrWójciknode.jsには、[crypto](https://nodejs.org/api/crypto.html)のサポートが組み込まれている可能性があります。その可用性を確認することは、 。 – traktor53
- 1. 検出されたファイルの変更2012
- 2. CMakeはどのように変更されたファイルを検出しますか
- 3. Eclipse Egitで変更されたファイルが検出されない
- 4. SpyderはインポートされたPythonファイルの変更を検出しません。
- 5. Windowsフォーム:フォーカスされたコントロールの変更を検出します。
- 6. ABAddressBookRegisterExternalChangeCallbackから変更されたものを検出します。
- 7. 変更された.exe(ビルド)を検出します
- 8. 検出長さが変更されました
- 9. IntelliJ IDEAにプロジェクトをリフレッシュし、変更されたファイルを検出させる
- 10. VisualStudio GITは既にコミットされた変更を検出しました
- 11. Django StaticFilesとAmazon S3:変更されたファイルを検出するには?
- 12. 迷惑なゲストマシンでファイルの変更を検出しました
- 13. CruiseControl:変更が検出されましたが、ワーキングコピーのタイムスタンプは変更されていません
- 14. 最後に変更されたファイルを検出するためにCronjob
- 15. 変更されたウェブページを検出する方法は?
- 16. Django-storageが変更された静的ファイルを検出しない
- 17. uiModeまたはKeyboardの変更を検出しました。
- 18. NodeJSは、クライアント(モバイル)またはブラウザを検出しますか?
- 19. サーバーjsとcssファイルを検出する方法は、ページをリフレッシュすると変更されました
- 20. 変更イベントで 'Enter'キーが押されたことを検出しました
- 21. InnoセットアップTasksList.OnClickCheckイベントで変更されたタスク/アイテムを検出しました
- 22. JavaScriptで変更された隠しセレクトオプションの変更イベントで検出する
- 23. Linuxユーザー空間から変更されたファイルを検出する
- 24. DbContextは変更されたプロパティのみを検証します
- 25. gitはファイルが変更されたことをどのように検出しますか?
- 26. iCalファイルの変更を検出する
- 27. Swiftは.xibファイルからテキストフィールドの変更を検出しました
- 28. システムクロックが変更されたかどうかを検出しますか?
- 29. iFrame内のURLが変更されたかどうかを検出します
- 30. 何かが変更されたかどうかを検出します
は、ファイルの最終更新タイムスタンプをチェックする方が簡単ではないでしょうか? –