0

他のいくつかのプログラムが XML ファイルを書き込むディレクトリがあり、それらのファイルが完成したときに処理する必要があります。

これまでは、書き込みプログラムに最初に一時的な名前を使用し、最後にのみ".xml". 私のコードは次のようになります:

var fs  = require("fs");
var handleFiles = function(){
    fs.readdirSync(args.in).forEach(function(filename) {
        if (filename.slice(-4)!=='.xml') return;
        // handle XML file here
    });
}
fs.watch(args.in, handleFiles);

しかし、私がサポートしなければならない新しいプログラムの中には、一時的な名前で書き込むことができないものがあります。

ファイルが効率的で信頼性の高いクロスブラウザー (Windows と Linux) で完全に書き込まれ、タイムアウトベースではない (つまり、機能するまで 10 ミリ秒ごとに名前の変更をテストしない) 方法でファイルを確実に処理するにはどうすればよいですか?

書き込み操作はワンショットなので、書き込みがロックされていない新しいファイルがある場合に通知する必要があると思います (Linux の場合、さらに重要なのは Windows の場合)。

4

2 に答える 2

1

Linux では、 inotify機能を使用できます。inotify(7)を参照してください。

incrontabを使用する価値があるかもしれません。

于 2013-09-05T07:22:50.487 に答える
0

これに対処するための 1 つの手法は、メイン ファイルの作成後に書き込まれるゼロバイトの「シグナル ファイル」を使用することです。例えば

mybigfile.txt
mybigfile.txt.done

「.done」ファイルの長さは 0 バイトで、データ ファイルの書き込みが完了すると、「タッチ」または同様のプロセスによって作成されます。.done ファイルをスキャンし、見つからない場合は何もしません。残念ながら、書き込みプロセスを制御できないことを暗示しているため、これは使用できるソリューションではない可能性があります。

于 2013-09-05T08:13:28.787 に答える