質問

私は、ファイルの変更を検出したい、ファイルが変更された場合、私はserver.Iにファイルをコピーするためにscpコマンドを実行するためにchild_processを使用するドキュメントのNode.js見上げ、fs.watchFile機能は何を思わ私がやりたいが、私はそれをしようとしたとき、何とかそれはちょうど私が期待どおりに動作しません。次のコードを使用した。

var fs = require('fs');                                                                        

console.log("Watching .bash_profile");

fs.watchFile('/home/test/.bash_profile', function(curr,prev) {
    console.log("current mtime: " +curr.mtime);
    console.log("previous mtime: "+prev.mtime);
    if (curr.mtime == prev.mtime) {
        console.log("mtime equal");
    } else {
        console.log("mtime not equal");
    }   
});

私が見たファイルにアクセスする場合は、上記のコードでは、コールバック関数は、出力と同じのmtimeを、そして常に出力「のmtime等しくない」(私は、ファイルへのアクセス)し、実行して取得します。出力:

Watching .bash_profile
current mtime: Mon Sep 27 2010 18:41:27 GMT+0100 (BST)
previous mtime: Mon Sep 27 2010 18:41:27 GMT+0100 (BST)
mtime not equal

誰が知っている、なぜ文が失敗した場合の2はファイルのmtimeが同じである場合(もチェックを識別し、それでも同じ出力を得る===使用してみました)?

役に立ちましたか?

解決

mtimeプロパティはDateオブジェクトである場合は、

、これらは等しくなることはありません。 JavaScriptで二つの別々のオブジェクトが同じで、それらが実際には同じオブジェクトである場合にのみ(変数が同一のメモリインスタンスを指している)

obj1 = new Date(2010,09,27);
obj2 = new Date(2010,09,27);
obj3 = obj1; // Objects are passed BY REFERENCE!

obj1 != obj2; // true, different object instances
obj1 == obj3; // true, two variable pointers are set for the same object
obj2 != obj3; // true, different object instances

これらの2つの日付の値が同じで、使用されているかどうかを確認するには、

curr.mtime.getTime() == prev.mtime.getTime();

watchFile出力のDateオブジェクトまたは文字列ならば、私はチェックしませんでしたが、それは間違いなくあなたの説明から、このように思えるので、このような場合には、私は確信して実際にはないんだけど)

他のヒント

"賢い" 人のために:

if (curr.mtime - prev.mtime) {
    // file changed
}

悲しいことに、正しい方法がある。

if (+curr.mtime === +prev.mtime) {}

+力unixtimeあるint型へのDateオブジェクトます。

場合のみchangeイベントを発生させますあなたは(有益なイベントを取得するために Watchr に使用することができ、物事を単純化するために、ファイルは実際に)変更されました。また、ディレクトリツリー全体を見てサポートしています)。

私たちは、Windowsのファイルシステムで実行されているCentOSのマシンの怪しげな文脈でも、作品を見たファイルのためのchokidarを使用(浮浪者のVirtualBoxのCentOSは、Windowsマシン上で実行されている)。

https://github.com/paulmillr/chokidarする

迅速かつ厄介なソリューション。 以前のまたは後面での日付の比較を行っていない(<または>)と、あなたは、単にdatestringsを比較する場合は、単に各1に迅速にtoString()を行います。

 if (curr.mtime.toString() == prev.mtime.toString()) 
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top